geometry_8c-source.html

来自「仿真人工智能是指用人工的方法和技术」· HTML 代码 · 共 754 行 · 第 1/5 页

HTML
754
字号
00867   <font class="comment">// cos(phi) = x/r &lt;=&gt; x = r*cos(phi); sin(phi) = y/r &lt;=&gt; 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 &gt; 180.0  ) angle -= 360.0;00878   <font class="keywordflow">while</font>( angle &lt; -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 &lt; 0 )00901     cerr &lt;&lt; <font class="stringliteral">"(Geometry:getLengthGeomSeries): negative ratio"</font> &lt;&lt; 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) =&gt;  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 &lt;= 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) =&gt;  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 &gt; 1 )00942     cerr &lt;&lt; <font class="stringliteral">"(Geometry:CalcLengthGeomSeries): series does not converge"</font> &lt;&lt; endl;00943 00944   <font class="comment">// s = a(1-r^n)/(1-r) with n-&gt;inf and 0&lt;r&lt;1 =&gt; 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) =&gt;  s = a(1-r^n)/(1-r) =&gt; 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 &gt; 1 )00978     cerr &lt;&lt; <font class="stringliteral">"(Geometry:getFirstInfGeomSeries):series does not converge"</font> &lt;&lt; endl;00979 00980   <font class="comment">// s = a(1-r^n)/(1-r) with r-&gt;inf and 0&lt;r&lt;1 =&gt; r^n = 0 =&gt; 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) &lt; <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 &lt; 0)               <font class="comment">// if discriminant &lt; 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 &gt; 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&amp; os)01037 {01038   os &lt;&lt; <font class="stringliteral">"c:"</font> &lt;&lt; <a class="code" href="classCircle.html#o0">m_posCenter</a> &lt;&lt; <font class="stringliteral">", r:"</font> &lt;&lt; <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 &gt; 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 ) &lt; <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 + -
显示快捷键?