geometry_8c-source.html

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

HTML
754
字号
00552   <a class="code" href="classVecPosition.html#o1">m_y</a> = dY;00553   <font class="keywordflow">return</font> ( true );00554 }00555 <a name="l00558"></a><a class="code" href="classVecPosition.html#a28">00558</a> <font class="keywordtype">double</font> <a class="code" href="classVecPosition.html#a28">VecPosition::getY</a>( )<font class="keyword"> const</font>00559 <font class="keyword"></font>{00560   <font class="keywordflow">return</font> ( m_y );00561 }00562 <a name="l00572"></a><a class="code" href="classVecPosition.html#a29">00572</a> <font class="keywordtype">void</font> <a class="code" href="classVecPosition.html#a29">VecPosition::setVecPosition</a>( <font class="keywordtype">double</font> dX = 0, <font class="keywordtype">double</font> dY = 0, <a class="code" href="Geometry_8h.html#a19">CoordSystemT</a> cs)00573 {00574   <font class="keywordflow">if</font>( cs == CARTESIAN )00575   {00576     <a class="code" href="classVecPosition.html#o0">m_x</a> = dX;00577     <a class="code" href="classVecPosition.html#o1">m_y</a> = dY;00578   }00579   <font class="keywordflow">else</font>00580     *<font class="keyword">this</font> = <a class="code" href="classVecPosition.html#d0">getVecPositionFromPolar</a>( dX, dY );00581 }00582 <a name="l00589"></a><a class="code" href="classVecPosition.html#a30">00589</a> <font class="keywordtype">double</font> <a class="code" href="classVecPosition.html#a30">VecPosition::getDistanceTo</a>( <font class="keyword">const</font> <a class="code" href="classVecPosition.html">VecPosition</a> p )00590 {00591   <font class="keywordflow">return</font> ( ( *<font class="keyword">this</font> - p ).getMagnitude( ) );00592 }00593 <a name="l00602"></a><a class="code" href="classVecPosition.html#a31">00602</a> <a class="code" href="classVecPosition.html">VecPosition</a> <a class="code" href="classVecPosition.html#a31">VecPosition::setMagnitude</a>( <font class="keywordtype">double</font> d )00603 {00604   <font class="keywordflow">if</font>( <a class="code" href="classVecPosition.html#a32">getMagnitude</a>( ) &gt; <a class="code" href="Geometry_8h.html#a0">EPSILON</a> )00605      ( *this ) *= ( d / <a class="code" href="classVecPosition.html#a32">getMagnitude</a>( ) );00606 00607   <font class="keywordflow">return</font> ( *this );00608 }00609 <a name="l00614"></a><a class="code" href="classVecPosition.html#a32">00614</a> <font class="keywordtype">double</font> <a class="code" href="classVecPosition.html#a32">VecPosition::getMagnitude</a>( )<font class="keyword"> const</font>00615 <font class="keyword"></font>{00616   <font class="keywordflow">return</font> ( sqrt( <a class="code" href="classVecPosition.html#o0">m_x</a> * <a class="code" href="classVecPosition.html#o0">m_x</a> + <a class="code" href="classVecPosition.html#o1">m_y</a> * <a class="code" href="classVecPosition.html#o1">m_y</a> ) );00617 }00618 <a name="l00625"></a><a class="code" href="classVecPosition.html#a33">00625</a> <a class="code" href="Geometry_8h.html#a2">AngDeg</a> <a class="code" href="classVecPosition.html#a33">VecPosition::getDirection</a>( )<font class="keyword"> const</font>00626 <font class="keyword"></font>{00627   <font class="keywordflow">return</font> ( <a class="code" href="Geometry_8h.html#a9">atan2Deg</a>( <a class="code" href="classVecPosition.html#o1">m_y</a>, <a class="code" href="classVecPosition.html#o0">m_x</a> ) );00628 }00629 <a name="l00636"></a><a class="code" href="classVecPosition.html#a34">00636</a> <font class="keywordtype">bool</font> <a class="code" href="classVecPosition.html#a34">VecPosition::isInFrontOf</a>( <font class="keyword">const</font> <a class="code" href="classVecPosition.html">VecPosition</a> &amp;p )00637 {00638   <font class="keywordflow">return</font> ( ( <a class="code" href="classVecPosition.html#o0">m_x</a> &gt; p.<a class="code" href="classVecPosition.html#a26">getX</a>( ) ) ? <font class="keyword">true</font> : <font class="keyword">false</font> );00639 }00640 <a name="l00646"></a><a class="code" href="classVecPosition.html#a35">00646</a> <font class="keywordtype">bool</font> <a class="code" href="classVecPosition.html#a34">VecPosition::isInFrontOf</a>( <font class="keyword">const</font> <font class="keywordtype">double</font> &amp;d )00647 {00648   <font class="keywordflow">return</font> ( ( <a class="code" href="classVecPosition.html#o0">m_x</a> &gt; d ) ? <font class="keyword">true</font> : <font class="keyword">false</font> );00649 }00650 <a name="l00657"></a><a class="code" href="classVecPosition.html#a36">00657</a> <font class="keywordtype">bool</font> <a class="code" href="classVecPosition.html#a36">VecPosition::isBehindOf</a>( <font class="keyword">const</font> <a class="code" href="classVecPosition.html">VecPosition</a> &amp;p )00658 {00659   <font class="keywordflow">return</font> ( ( <a class="code" href="classVecPosition.html#o0">m_x</a> &lt; p.<a class="code" href="classVecPosition.html#a26">getX</a>( ) ) ? <font class="keyword">true</font> : <font class="keyword">false</font> );00660 }00661 <a name="l00667"></a><a class="code" href="classVecPosition.html#a37">00667</a> <font class="keywordtype">bool</font> <a class="code" href="classVecPosition.html#a36">VecPosition::isBehindOf</a>( <font class="keyword">const</font> <font class="keywordtype">double</font> &amp;d )00668 {00669   <font class="keywordflow">return</font> ( ( <a class="code" href="classVecPosition.html#o0">m_x</a> &lt; d ) ? <font class="keyword">true</font> : <font class="keyword">false</font> );00670 }00671 <a name="l00678"></a><a class="code" href="classVecPosition.html#a38">00678</a> <font class="keywordtype">bool</font> <a class="code" href="classVecPosition.html#a38">VecPosition::isLeftOf</a>( <font class="keyword">const</font> <a class="code" href="classVecPosition.html">VecPosition</a> &amp;p )00679 {00680   <font class="keywordflow">return</font> ( ( <a class="code" href="classVecPosition.html#o1">m_y</a> &lt; p.<a class="code" href="classVecPosition.html#a28">getY</a>( ) ) ? <font class="keyword">true</font> : <font class="keyword">false</font> );00681 }00682 <a name="l00688"></a><a class="code" href="classVecPosition.html#a39">00688</a> <font class="keywordtype">bool</font> <a class="code" href="classVecPosition.html#a38">VecPosition::isLeftOf</a>( <font class="keyword">const</font> <font class="keywordtype">double</font> &amp;d )00689 {00690   <font class="keywordflow">return</font> ( ( <a class="code" href="classVecPosition.html#o1">m_y</a> &lt; d ) ? <font class="keyword">true</font> : <font class="keyword">false</font> );00691 }00692 <a name="l00699"></a><a class="code" href="classVecPosition.html#a40">00699</a> <font class="keywordtype">bool</font> <a class="code" href="classVecPosition.html#a40">VecPosition::isRightOf</a>( <font class="keyword">const</font> <a class="code" href="classVecPosition.html">VecPosition</a> &amp;p )00700 {00701   <font class="keywordflow">return</font> ( ( <a class="code" href="classVecPosition.html#o1">m_y</a> &gt; p.<a class="code" href="classVecPosition.html#a28">getY</a>( ) ) ? <font class="keyword">true</font> : <font class="keyword">false</font> );00702 }00703 <a name="l00709"></a><a class="code" href="classVecPosition.html#a41">00709</a> <font class="keywordtype">bool</font> <a class="code" href="classVecPosition.html#a40">VecPosition::isRightOf</a>( <font class="keyword">const</font> <font class="keywordtype">double</font> &amp;d )00710 {00711   <font class="keywordflow">return</font> ( ( <a class="code" href="classVecPosition.html#o1">m_y</a> &gt; d ) ? <font class="keyword">true</font> : <font class="keyword">false</font> );00712 }00713 <a name="l00721"></a><a class="code" href="classVecPosition.html#a42">00721</a> <font class="keywordtype">bool</font> <a class="code" href="classVecPosition.html#a42">VecPosition::isBetweenX</a>( <font class="keyword">const</font> <a class="code" href="classVecPosition.html">VecPosition</a> &amp;p1, <font class="keyword">const</font> <a class="code" href="classVecPosition.html">VecPosition</a> &amp;p2 )00722 {00723   <font class="keywordflow">return</font> ( ( <a class="code" href="classVecPosition.html#a34">isInFrontOf</a>( p1 ) &amp;&amp; <a class="code" href="classVecPosition.html#a36">isBehindOf</a>( p2 ) ) ? <font class="keyword">true</font> : <font class="keyword">false</font> );00724 }00725 <a name="l00733"></a><a class="code" href="classVecPosition.html#a43">00733</a> <font class="keywordtype">bool</font> <a class="code" href="classVecPosition.html#a42">VecPosition::isBetweenX</a>( <font class="keyword">const</font> <font class="keywordtype">double</font> &amp;d1, <font class="keyword">const</font> <font class="keywordtype">double</font> &amp;d2 )00734 {00735   <font class="keywordflow">return</font> ( ( <a class="code" href="classVecPosition.html#a34">isInFrontOf</a>( d1 ) &amp;&amp; <a class="code" href="classVecPosition.html#a36">isBehindOf</a>( d2 ) ) ? <font class="keyword">true</font> : <font class="keyword">false</font> );00736 }00737 <a name="l00746"></a><a class="code" href="classVecPosition.html#a44">00746</a> <font class="keywordtype">bool</font> <a class="code" href="classVecPosition.html#a44">VecPosition::isBetweenY</a>( <font class="keyword">const</font> <a class="code" href="classVecPosition.html">VecPosition</a> &amp;p1, <font class="keyword">const</font> <a class="code" href="classVecPosition.html">VecPosition</a> &amp;p2 )00747 {00748   <font class="keywordflow">return</font> ( ( <a class="code" href="classVecPosition.html#a40">isRightOf</a>( p1 ) &amp;&amp; <a class="code" href="classVecPosition.html#a38">isLeftOf</a>( p2 ) ) ? <font class="keyword">true</font> : <font class="keyword">false</font> );00749 }00750 <a name="l00759"></a><a class="code" href="classVecPosition.html#a45">00759</a> <font class="keywordtype">bool</font> <a class="code" href="classVecPosition.html#a44">VecPosition::isBetweenY</a>( <font class="keyword">const</font> <font class="keywordtype">double</font> &amp;d1, <font class="keyword">const</font> <font class="keywordtype">double</font> &amp;d2 )00760 {00761   <font class="keywordflow">return</font> ( ( <a class="code" href="classVecPosition.html#a40">isRightOf</a>( d1 ) &amp;&amp; <a class="code" href="classVecPosition.html#a38">isLeftOf</a>( d2 ) ) ? <font class="keyword">true</font> : <font class="keyword">false</font> );00762 }00763 <a name="l00768"></a><a class="code" href="classVecPosition.html#a46">00768</a> <a class="code" href="classVecPosition.html">VecPosition</a> <a class="code" href="classVecPosition.html#a46">VecPosition::normalize</a>( )00769 {00770   <font class="keywordflow">return</font> ( <a class="code" href="classVecPosition.html#a31">setMagnitude</a>( 1.0 ) );00771 }00772 <a name="l00783"></a><a class="code" href="classVecPosition.html#a47">00783</a> <a class="code" href="classVecPosition.html">VecPosition</a> <a class="code" href="classVecPosition.html#a47">VecPosition::rotate</a>( <a class="code" href="Geometry_8h.html#a2">AngDeg</a> angle )00784 {00785   <font class="comment">// determine the polar representation of the current VecPosition</font>00786   <font class="keywordtype">double</font> dMag    = this-&gt;<a class="code" href="classVecPosition.html#a32">getMagnitude</a>( );00787   <font class="keywordtype">double</font> dNewDir = this-&gt;<a class="code" href="classVecPosition.html#a33">getDirection</a>( ) + angle;  <font class="comment">// add rotation angle to phi</font>00788   <a class="code" href="classVecPosition.html#a29">setVecPosition</a>( dMag, dNewDir, POLAR );          <font class="comment">// convert back to Cartesian</font>00789   <font class="keywordflow">return</font> ( *this );00790 }00791 <a name="l00804"></a><a class="code" href="classVecPosition.html#a48">00804</a> <a class="code" href="classVecPosition.html">VecPosition</a> <a class="code" href="classVecPosition.html#a48">VecPosition::globalToRelative</a>( <a class="code" href="classVecPosition.html">VecPosition</a> origin, <a class="code" href="Geometry_8h.html#a2">AngDeg</a> ang )00805 {00806   <font class="comment">// convert global coordinates into relative coordinates by aligning relative</font>00807   <font class="comment">// frame and world frame. First perform translation to make origins of both</font>00808   <font class="comment">// frames coincide. Then perform rotation to make axes of both frames coincide</font>00809   <font class="comment">// (use negative angle since you rotate relative frame to world frame).</font>00810   *<font class="keyword">this</font> -= origin;00811   <font class="keywordflow">return</font> ( <a class="code" href="classVecPosition.html#a47">rotate</a>( -ang ) );00812 }00813 <a name="l00826"></a><a class="code" href="classVecPosition.html#a49">00826</a> <a class="code" href="classVecPosition.html">VecPosition</a> <a class="code" href="classVecPosition.html#a49">VecPosition::relativeToGlobal</a>( <a class="code" href="classVecPosition.html">VecPosition</a> origin, <a class="code" href="Geometry_8h.html#a2">AngDeg</a> ang )00827 {00828   <font class="comment">// convert relative coordinates into global coordinates by aligning world</font>00829   <font class="comment">// frame and relative frame. First perform rotation to make axes of both</font>00830   <font class="comment">// frames coincide (use positive angle since you rotate world frame to</font>00831   <font class="comment">// relative frame). Then perform translation to make origins of both frames</font>00832   <font class="comment">// coincide.</font>00833   <a class="code" href="classVecPosition.html#a47">rotate</a>( ang );00834   *<font class="keyword">this</font> += origin;00835   <font class="keywordflow">return</font> ( *this );00836 }00837 <a name="l00847"></a><a class="code" href="classVecPosition.html#a50">00847</a> <a class="code" href="classVecPosition.html">VecPosition</a> <a class="code" href="classVecPosition.html#a50">VecPosition::getVecPositionOnLineFraction</a>( <a class="code" href="classVecPosition.html">VecPosition</a> &amp;p,00848                                                        <font class="keywordtype">double</font>      dFrac )00849 {00850   <font class="comment">// determine point on line that lies at fraction dFrac of whole line</font>00851   <font class="comment">// example: this --- 0.25 ---------  p</font>00852   <font class="comment">// formula: this + dFrac * ( p - this ) = this - dFrac * this + dFrac * p =</font>00853   <font class="comment">//          ( 1 - dFrac ) * this + dFrac * p</font>00854   <font class="keywordflow">return</font> ( ( *this ) * ( 1.0 - dFrac ) + ( p * dFrac ) );00855 }00856 <a name="l00865"></a><a class="code" href="classVecPosition.html#d0">00865</a> <a class="code" href="classVecPosition.html">VecPosition</a> <a class="code" href="classVecPosition.html#d0">VecPosition::getVecPositionFromPolar</a>( <font class="keywordtype">double</font> dMag, <a class="code" href="Geometry_8h.html#a2">AngDeg</a> ang )00866 {

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?