geometry_8c-source.html
来自「仿真人工智能是指用人工的方法和技术」· HTML 代码 · 共 754 行 · 第 1/5 页
HTML
754 行
00867 <font class="comment">// cos(phi) = x/r <=> x = r*cos(phi); sin(phi) = y/r <=> y = r*sin(phi)</font>00868 <font class="keywordflow">return</font> ( <a class="code" href="classVecPosition.html#a0">VecPosition</a>( dMag * <a class="code" href="Geometry_8h.html#a5">cosDeg</a>( ang ), dMag * <a class="code" href="Geometry_8h.html#a6">sinDeg</a>( ang ) ) );00869 }00870 <a name="l00875"></a><a class="code" href="classVecPosition.html#d1">00875</a> <a class="code" href="Geometry_8h.html#a2">AngDeg</a> <a class="code" href="classVecPosition.html#d1">VecPosition::normalizeAngle</a>( <a class="code" href="Geometry_8h.html#a2">AngDeg</a> angle )00876 {00877 <font class="keywordflow">while</font>( angle > 180.0 ) angle -= 360.0;00878 <font class="keywordflow">while</font>( angle < -180.0 ) angle += 360.0;00879 00880 <font class="keywordflow">return</font> ( angle );00881 }00882 00883 00884 <font class="comment">/******************************************************************************/</font>00885 <font class="comment">/*********************** CLASS GEOMETRY ***************************************/</font>00886 <font class="comment">/******************************************************************************/</font>00887 <a name="l00898"></a><a class="code" href="classGeometry.html#d0">00898</a> <font class="keywordtype">double</font> <a class="code" href="classGeometry.html#d0">Geometry::getLengthGeomSeries</a>( <font class="keywordtype">double</font> dFirst, <font class="keywordtype">double</font> dRatio, <font class="keywordtype">double</font> dSum )00899 {00900 <font class="keywordflow">if</font>( dRatio < 0 )00901 cerr << <font class="stringliteral">"(Geometry:getLengthGeomSeries): negative ratio"</font> << endl;00902 00903 <font class="comment">// s = a + ar + ar^2 + .. + ar^n-1 and thus sr = ar + ar^2 + .. + ar^n</font>00904 <font class="comment">// subtract: sr - s = - a + ar^n) => s(1-r)/a + 1 = r^n = temp</font>00905 <font class="comment">// log r^n / n = n log r / log r = n = length</font>00906 <font class="keywordtype">double</font> temp = (dSum * ( dRatio - 1 ) / dFirst) + 1;00907 <font class="keywordflow">if</font>( temp <= 0 )00908 <font class="keywordflow">return</font> -1.0;00909 <font class="keywordflow">return</font> log( temp ) / log( dRatio ) ;00910 }00911 <a name="l00922"></a><a class="code" href="classGeometry.html#d1">00922</a> <font class="keywordtype">double</font> <a class="code" href="classGeometry.html#d1">Geometry::getSumGeomSeries</a>( <font class="keywordtype">double</font> dFirst, <font class="keywordtype">double</font> dRatio, <font class="keywordtype">double</font> dLength)00923 {00924 <font class="comment">// s = a + ar + ar^2 + .. + ar^n-1 and thus sr = ar + ar^2 + .. + ar^n</font>00925 <font class="comment">// subtract: s - sr = a - ar^n) => s = a(1-r^n)/(1-r)</font>00926 <font class="keywordflow">return</font> dFirst * ( 1 - pow( dRatio, dLength ) ) / ( 1 - dRatio ) ;00927 }00928 <a name="l00939"></a><a class="code" href="classGeometry.html#d2">00939</a> <font class="keywordtype">double</font> <a class="code" href="classGeometry.html#d2">Geometry::getSumInfGeomSeries</a>( <font class="keywordtype">double</font> dFirst, <font class="keywordtype">double</font> dRatio )00940 {00941 <font class="keywordflow">if</font>( dRatio > 1 )00942 cerr << <font class="stringliteral">"(Geometry:CalcLengthGeomSeries): series does not converge"</font> << endl;00943 00944 <font class="comment">// s = a(1-r^n)/(1-r) with n->inf and 0<r<1 => r^n = 0</font>00945 <font class="keywordflow">return</font> dFirst / ( 1 - dRatio );00946 }00947 <a name="l00958"></a><a class="code" href="classGeometry.html#d3">00958</a> <font class="keywordtype">double</font> <a class="code" href="classGeometry.html#d3">Geometry::getFirstGeomSeries</a>( <font class="keywordtype">double</font> dSum, <font class="keywordtype">double</font> dRatio, <font class="keywordtype">double</font> dLength)00959 {00960 <font class="comment">// s = a + ar + ar^2 + .. + ar^n-1 and thus sr = ar + ar^2 + .. + ar^n</font>00961 <font class="comment">// subtract: s - sr = a - ar^n) => s = a(1-r^n)/(1-r) => a = s*(1-r)/(1-r^n)</font>00962 <font class="keywordflow">return</font> dSum * ( 1 - dRatio )/( 1 - pow( dRatio, dLength ) ) ;00963 }00964 <a name="l00975"></a><a class="code" href="classGeometry.html#d4">00975</a> <font class="keywordtype">double</font> <a class="code" href="classGeometry.html#d4">Geometry::getFirstInfGeomSeries</a>( <font class="keywordtype">double</font> dSum, <font class="keywordtype">double</font> dRatio )00976 {00977 <font class="keywordflow">if</font>( dRatio > 1 )00978 cerr << <font class="stringliteral">"(Geometry:getFirstInfGeomSeries):series does not converge"</font> << endl;00979 00980 <font class="comment">// s = a(1-r^n)/(1-r) with r->inf and 0<r<1 => r^n = 0 => a = s ( 1 - r)</font>00981 <font class="keywordflow">return</font> dSum * ( 1 - dRatio );00982 }00983 <a name="l00993"></a><a class="code" href="classGeometry.html#d5">00993</a> <font class="keywordtype">int</font> <a class="code" href="classGeometry.html#d5">Geometry::abcFormula</a>(<font class="keywordtype">double</font> a, <font class="keywordtype">double</font> b, <font class="keywordtype">double</font> c, <font class="keywordtype">double</font> *s1, <font class="keywordtype">double</font> *s2)00994 {00995 <font class="keywordtype">double</font> dDiscr = b*b - 4*a*c; <font class="comment">// discriminant is b^2 - 4*a*c</font>00996 <font class="keywordflow">if</font> (fabs(dDiscr) < <a class="code" href="Geometry_8h.html#a0">EPSILON</a> ) <font class="comment">// if discriminant = 0</font>00997 {00998 *s1 = -b / (2 * a); <font class="comment">// only one solution</font>00999 <font class="keywordflow">return</font> 1;01000 }01001 <font class="keywordflow">else</font> <font class="keywordflow">if</font> (dDiscr < 0) <font class="comment">// if discriminant < 0</font>01002 <font class="keywordflow">return</font> 0; <font class="comment">// no solutions</font>01003 <font class="keywordflow">else</font> <font class="comment">// if discriminant > 0</font>01004 {01005 dDiscr = sqrt(dDiscr); <font class="comment">// two solutions</font>01006 *s1 = (-b + dDiscr ) / (2 * a);01007 *s2 = (-b - dDiscr ) / (2 * a);01008 <font class="keywordflow">return</font> 2;01009 }01010 }01011 01012 <font class="comment">/******************************************************************************/</font>01013 <font class="comment">/********************** CLASS CIRCLE ******************************************/</font>01014 <font class="comment">/******************************************************************************/</font>01015 <a name="l01020"></a><a class="code" href="classCircle.html#a1">01020</a> <a class="code" href="classCircle.html#a0">Circle::Circle</a>( <a class="code" href="classVecPosition.html">VecPosition</a> pos, <font class="keywordtype">double</font> dR )01021 {01022 <a class="code" href="classCircle.html#a3">setCircle</a>( pos, dR );01023 }01024 <a name="l01027"></a><a class="code" href="classCircle.html#a0">01027</a> <a class="code" href="classCircle.html#a0">Circle::Circle</a>( )01028 {01029 <a class="code" href="classCircle.html#a3">setCircle</a>( <a class="code" href="classVecPosition.html">VecPosition</a>(-1000.0,-1000.0), 0);01030 }01031 <a name="l01036"></a><a class="code" href="classCircle.html#a2">01036</a> <font class="keywordtype">void</font> <a class="code" href="classCircle.html#a2">Circle::show</a>( ostream& os)01037 {01038 os << <font class="stringliteral">"c:"</font> << <a class="code" href="classCircle.html#o0">m_posCenter</a> << <font class="stringliteral">", r:"</font> << <a class="code" href="classCircle.html#o1">m_dRadius</a>;01039 }01040 <a name="l01046"></a><a class="code" href="classCircle.html#a3">01046</a> <font class="keywordtype">bool</font> <a class="code" href="classCircle.html#a3">Circle::setCircle</a>( <a class="code" href="classVecPosition.html">VecPosition</a> pos, <font class="keywordtype">double</font> dR )01047 {01048 <a class="code" href="classCircle.html#a6">setCenter</a>( pos );01049 <font class="keywordflow">return</font> <a class="code" href="classCircle.html#a4">setRadius</a>( dR );01050 }<a name="l01054"></a><a class="code" href="classCircle.html#a4">01054</a> <font class="keywordtype">bool</font> <a class="code" href="classCircle.html#a4">Circle::setRadius</a>( <font class="keywordtype">double</font> dR )01055 {01056 <font class="keywordflow">if</font>( dR > 0 )01057 {01058 <a class="code" href="classCircle.html#o1">m_dRadius</a> = dR;01059 <font class="keywordflow">return</font> <font class="keyword">true</font>;01060 }01061 <font class="keywordflow">else</font>01062 {01063 <a class="code" href="classCircle.html#o1">m_dRadius</a> = 0.0;01064 <font class="keywordflow">return</font> <font class="keyword">false</font>;01065 }01066 }01067 <a name="l01070"></a><a class="code" href="classCircle.html#a5">01070</a> <font class="keywordtype">double</font> <a class="code" href="classCircle.html#a5">Circle::getRadius</a>()01071 {01072 <font class="keywordflow">return</font> <a class="code" href="classCircle.html#o1">m_dRadius</a>;01073 }01074 <a name="l01078"></a><a class="code" href="classCircle.html#a6">01078</a> <font class="keywordtype">bool</font> <a class="code" href="classCircle.html#a6">Circle::setCenter</a>( <a class="code" href="classVecPosition.html">VecPosition</a> pos )01079 {01080 <a class="code" href="classCircle.html#o0">m_posCenter</a> = pos;01081 <font class="keywordflow">return</font> <font class="keyword">true</font>;01082 }01083 <a name="l01086"></a><a class="code" href="classCircle.html#a7">01086</a> <a class="code" href="classVecPosition.html">VecPosition</a> <a class="code" href="classCircle.html#a7">Circle::getCenter</a>()01087 {01088 <font class="keywordflow">return</font> <a class="code" href="classCircle.html#o0">m_posCenter</a>;01089 }01090 <a name="l01093"></a><a class="code" href="classCircle.html#a8">01093</a> <font class="keywordtype">double</font> <a class="code" href="classCircle.html#a8">Circle::getCircumference</a>()01094 {01095 <font class="keywordflow">return</font> 2.0*M_PI*<a class="code" href="classCircle.html#a5">getRadius</a>();01096 }01097 <a name="l01100"></a><a class="code" href="classCircle.html#a9">01100</a> <font class="keywordtype">double</font> <a class="code" href="classCircle.html#a9">Circle::getArea</a>()01101 {01102 <font class="keywordflow">return</font> M_PI*<a class="code" href="classCircle.html#a5">getRadius</a>()*<a class="code" href="classCircle.html#a5">getRadius</a>();01103 }01104 <a name="l01110"></a><a class="code" href="classCircle.html#a10">01110</a> <font class="keywordtype">bool</font> <a class="code" href="classCircle.html#a10">Circle::isInside</a>( <a class="code" href="classVecPosition.html">VecPosition</a> pos )01111 {01112 <font class="keywordflow">return</font> <a class="code" href="classCircle.html#o0">m_posCenter</a>.<a class="code" href="classVecPosition.html#a30">getDistanceTo</a>( pos ) < <a class="code" href="classCircle.html#a5">getRadius</a>() ;01113 }<a name="l01120"></a><a class="code" href="classCircle.html#a11">01120</a> <font class="keywordtype">int</font> <a class="code" href="classCircle.html#a11">Circle::getIntersectionPoints</a>( <a class="code" href="classCircle.html">Circle</a> c, <a class="code" href="classVecPosition.html">VecPosition</a> *p1, <a class="code" href="classVecPosition.html">VecPosition</a> *p2)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?