worldmodelpredict_8c-source.html

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

HTML
310
字号
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>WorldModelPredict.C Source File</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body bgcolor="#ffffff"><!-- Generated by Doxygen 1.2.12 --><center><a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="annotated.html">Compound List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center><hr><h1>WorldModelPredict.C</h1><a href="WorldModelPredict_8C.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <font class="comment">/*</font>00002 <font class="comment">Copyright (c) 2000,2001, Jelle Kok, University of Amsterdam</font>00003 <font class="comment">All rights reserved.</font>00004 <font class="comment"></font>00005 <font class="comment">Redistribution and use in source and binary forms, with or without </font>00006 <font class="comment">modification, are permitted provided that the following conditions are met:</font>00007 <font class="comment"></font>00008 <font class="comment">1. Redistributions of source code must retain the above copyright notice, this </font>00009 <font class="comment">list of conditions and the following disclaimer. </font>00010 <font class="comment"></font>00011 <font class="comment">2. Redistributions in binary form must reproduce the above copyright notice, </font>00012 <font class="comment">this list of conditions and the following disclaimer in the documentation </font>00013 <font class="comment">and/or other materials provided with the distribution. </font>00014 <font class="comment"></font>00015 <font class="comment">3. Neither the name of the University of Amsterdam nor the names of its </font>00016 <font class="comment">contributors may be used to endorse or promote products derived from this </font>00017 <font class="comment">software without specific prior written permission. </font>00018 <font class="comment"></font>00019 <font class="comment">THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" </font>00020 <font class="comment">AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE </font>00021 <font class="comment">IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE </font>00022 <font class="comment">DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE </font>00023 <font class="comment">FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL </font>00024 <font class="comment">DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR </font>00025 <font class="comment">SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER </font>00026 <font class="comment">CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, </font>00027 <font class="comment">OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE </font>00028 <font class="comment">OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</font>00029 <font class="comment">*/</font>00043 <font class="preprocessor">#include &lt;stdio.h&gt;</font>00044 <font class="preprocessor">#include "<a class="code" href="WorldModel_8h.html">WorldModel.h</a>"</font>00045 00046 <font class="comment">/*****************************************************************************/</font>00047 <font class="comment">/************************** PREDICTIONS **************************************/</font>00048 <font class="comment">/*****************************************************************************/</font>00049 <a name="l00062"></a><a class="code" href="classWorldModel.html#a102">00062</a> <font class="keywordtype">bool</font> <a class="code" href="classWorldModel.html#a102">WorldModel::predictStateAfterCommand</a>( <a class="code" href="classSoccerCommand.html">SoccerCommand</a> com,00063     <a class="code" href="classVecPosition.html">VecPosition</a> *pos, <a class="code" href="classVecPosition.html">VecPosition</a> *vel, <a class="code" href="Geometry_8h.html#a2">AngDeg</a> *angGlobalBody,00064     <a class="code" href="Geometry_8h.html#a2">AngDeg</a> *angGlobalNeck, <a class="code" href="classStamina.html">Stamina</a> *sta )00065 {00066   <font class="keywordflow">switch</font>( com.<a class="code" href="classSoccerCommand.html#m1">commandType</a> ) <font class="comment">// based on kind of command, choose action</font>00067   {00068     <font class="keywordflow">case</font> <a class="code" href="SoccerTypes_8h.html#a247a181">CMD_DASH</a>:00069       <font class="keywordflow">if</font>( <a class="code" href="classWorldModel.html#o11">playMode</a> != <a class="code" href="SoccerTypes_8h.html#a242a121">PM_BEFORE_KICK_OFF</a> )00070         <a class="code" href="classWorldModel.html#a105">predictStateAfterDash</a>( com.<a class="code" href="classSoccerCommand.html#m3">dPower</a>, pos, vel, sta, *angGlobalBody );00071       <font class="keywordflow">break</font>;00072     <font class="keywordflow">case</font> <a class="code" href="SoccerTypes_8h.html#a247a182">CMD_TURN</a>:00073       <a class="code" href="classWorldModel.html#a106">predictStateAfterTurn</a>(com.<a class="code" href="classSoccerCommand.html#m2">dAngle</a>,pos,vel,angGlobalBody,angGlobalNeck,sta);00074       <font class="keywordflow">break</font>;00075     <font class="keywordflow">case</font> <a class="code" href="SoccerTypes_8h.html#a247a183">CMD_TURNNECK</a>: <font class="comment">// note that position and velocity are not updated</font>00076       *angGlobalNeck = <a class="code" href="classVecPosition.html#d1">VecPosition::normalizeAngle</a>(*angGlobalNeck + com.<a class="code" href="classSoccerCommand.html#m2">dAngle</a>);00077       <font class="keywordflow">break</font>;00078     <font class="keywordflow">case</font> <a class="code" href="SoccerTypes_8h.html#a247a186">CMD_KICK</a>:00079     <font class="keywordflow">case</font> <a class="code" href="SoccerTypes_8h.html#a247a185">CMD_CATCH</a>:00080       <a class="code" href="classWorldModel.html#a105">predictStateAfterDash</a>( 0.0, pos, vel, sta, *angGlobalBody );00081       <font class="keywordflow">break</font>;00082     <font class="keywordflow">case</font> <a class="code" href="SoccerTypes_8h.html#a247a187">CMD_MOVE</a>:00083       pos-&gt;<a class="code" href="classVecPosition.html#a29">setVecPosition</a>( com.<a class="code" href="classSoccerCommand.html#m6">dX</a>, com.<a class="code" href="classSoccerCommand.html#m7">dY</a> );00084       vel-&gt;<a class="code" href="classVecPosition.html#a31">setMagnitude</a>( 0.0 );00085       <font class="keywordflow">break</font>;00086     <font class="keywordflow">case</font> <a class="code" href="SoccerTypes_8h.html#a247a180">CMD_ILLEGAL</a>:00087       <a class="code" href="classWorldModel.html#a105">predictStateAfterDash</a>( 0.01, pos, vel, sta, *angGlobalBody );00088       <font class="keywordflow">break</font>;00089     <font class="keywordflow">default</font>:00090       <font class="keywordflow">return</font> <font class="keyword">false</font>;00091       <font class="keywordflow">break</font>;00092   }00093   <font class="keywordflow">return</font> <font class="keyword">true</font>;00094 }00095 <a name="l00106"></a><a class="code" href="classWorldModel.html#a103">00106</a> <font class="keywordtype">bool</font> <a class="code" href="classWorldModel.html#a103">WorldModel::predictAgentStateAfterCommand</a>( <a class="code" href="classSoccerCommand.html">SoccerCommand</a> com,00107     <a class="code" href="classVecPosition.html">VecPosition</a> *pos, <a class="code" href="classVecPosition.html">VecPosition</a> *vel, <a class="code" href="Geometry_8h.html#a2">AngDeg</a> *angGlobalBody,00108     <a class="code" href="Geometry_8h.html#a2">AngDeg</a> *angGlobalNeck, <a class="code" href="classStamina.html">Stamina</a> *sta )00109 {00110   *pos           = <a class="code" href="classWorldModel.html#a43">getAgentGlobalPosition</a>();00111   *vel           = <a class="code" href="classWorldModel.html#a41">getAgentGlobalVelocity</a>();00112   *angGlobalBody = <a class="code" href="classWorldModel.html#a38">getAgentGlobalBodyAngle</a>();00113   *angGlobalNeck = <a class="code" href="classWorldModel.html#a37">getAgentGlobalNeckAngle</a>();00114   *sta           = <a class="code" href="classWorldModel.html#a39">getAgentStamina</a>();00115   <a class="code" href="classWorldModel.html#a102">predictStateAfterCommand</a>( com, pos, vel, angGlobalBody, angGlobalNeck, sta );00116 00117   <font class="keywordflow">return</font> <font class="keyword">true</font>;00118 }00119 <a name="l00125"></a><a class="code" href="classWorldModel.html#a104">00125</a> <a class="code" href="classVecPosition.html">VecPosition</a> <a class="code" href="classWorldModel.html#a104">WorldModel::predictAgentPosAfterCommand</a>( <a class="code" href="classSoccerCommand.html">SoccerCommand</a> com )00126 {00127   <a class="code" href="classVecPosition.html">VecPosition</a> p1, p2;00128   <a class="code" href="Geometry_8h.html#a2">AngDeg</a>      a1, a2;00129   <a class="code" href="classStamina.html">Stamina</a>     sta;00130   <a class="code" href="classWorldModel.html#a103">predictAgentStateAfterCommand</a>( com, &amp;p1, &amp;p2, &amp;a1, &amp;a2, &amp;sta );00131   <font class="keywordflow">return</font> p1;00132 }00133 <a name="l00142"></a><a class="code" href="classWorldModel.html#a105">00142</a> <font class="keywordtype">void</font> <a class="code" href="classWorldModel.html#a105">WorldModel::predictStateAfterDash</a>( <font class="keywordtype">double</font> dActualPower, <a class="code" href="classVecPosition.html">VecPosition</a> *pos,00143              <a class="code" href="classVecPosition.html">VecPosition</a> *vel, <a class="code" href="classStamina.html">Stamina</a> *sta, <font class="keywordtype">double</font> dDirection )00144 {00145   <font class="comment">// get acceleration associated with actualpower</font>00146   <font class="keywordtype">double</font> dEffort = ( sta != NULL ) ? sta-&gt;<a class="code" href="classStamina.html#a4">getEffort</a>() : 1.0;00147   <font class="keywordtype">double</font> dAcc    = dActualPower * <a class="code" href="classWorldModel.html#o0">SS</a>-&gt;<a class="code" href="classServerSettings.html#a80">getDashPowerRate</a>() * dEffort;00148 00149   <font class="comment">// add it to the velocity; negative acceleration in backward direction</font>00150   <font class="keywordflow">if</font>( dAcc &gt; 0 )00151     *vel += <a class="code" href="classVecPosition.html#d0">VecPosition::getVecPositionFromPolar</a>( dAcc, dDirection );00152   <font class="keywordflow">else</font>00153     *vel += <a class="code" href="classVecPosition.html#d0">VecPosition::getVecPositionFromPolar</a>( fabs(dAcc),00154         <a class="code" href="classVecPosition.html#d1">VecPosition::normalizeAngle</a>(dDirection+180));00155 00156   <font class="comment">// check if velocity doesn't exceed maximum speed</font>00157   <font class="keywordflow">if</font>( vel-&gt;<a class="code" href="classVecPosition.html#a32">getMagnitude</a>() &gt; <a class="code" href="classWorldModel.html#o0">SS</a>-&gt;<a class="code" href="classServerSettings.html#a14">getPlayerSpeedMax</a>() )00158     vel-&gt;<a class="code" href="classVecPosition.html#a31">setMagnitude</a>( <a class="code" href="classWorldModel.html#o0">SS</a>-&gt;<a class="code" href="classServerSettings.html#a14">getPlayerSpeedMax</a>() );00159 00160   <font class="comment">// add velocity to current global position and decrease velocity</font>00161   *pos += *vel;00162   *vel *= <a class="code" href="classWorldModel.html#o0">SS</a>-&gt;<a class="code" href="classServerSettings.html#a8">getPlayerDecay</a>();00163   <font class="keywordflow">if</font>( sta != NULL )00164     <a class="code" href="classWorldModel.html#a111">predictStaminaAfterDash</a>( dActualPower, sta );00165 }00166 <a name="l00178"></a><a class="code" href="classWorldModel.html#a106">00178</a> <font class="keywordtype">void</font> <a class="code" href="classWorldModel.html#a106">WorldModel::predictStateAfterTurn</a>( <a class="code" href="Geometry_8h.html#a2">AngDeg</a> dSendAngle, <a class="code" href="classVecPosition.html">VecPosition</a> *pos,00179           <a class="code" href="classVecPosition.html">VecPosition</a> *vel, <a class="code" href="Geometry_8h.html#a2">AngDeg</a> *angBody, <a class="code" href="Geometry_8h.html#a2">AngDeg</a> *angNeck, <a class="code" href="classStamina.html">Stamina</a> *sta )00180 {00181   <font class="comment">// calculate effective angle that is turned and turn body and neck accordingly</font>00182   <font class="keywordtype">double</font> dEffectiveAngle = <a class="code" href="classWorldModel.html#a150">getActualTurnAngle</a>( dSendAngle, vel-&gt;<a class="code" href="classVecPosition.html#a32">getMagnitude</a>());00183   *angBody = <a class="code" href="classVecPosition.html#d1">VecPosition::normalizeAngle</a>( *angBody + dEffectiveAngle );00184   *angNeck = <a class="code" href="classVecPosition.html#d1">VecPosition::normalizeAngle</a>( *angNeck + dEffectiveAngle );00185 00186   <font class="comment">// update as if dashed with no power</font>00187   <a class="code" href="classWorldModel.html#a105">predictStateAfterDash</a>( 0.0, pos, vel, sta, *angBody );00188   <font class="keywordflow">return</font>;00189 }00190 <a name="l00200"></a><a class="code" href="classWorldModel.html#a107">00200</a> <a class="code" href="classVecPosition.html">VecPosition</a> <a class="code" href="classWorldModel.html#a107">WorldModel::predictPosAfterNrCycles</a>( <a class="code" href="SoccerTypes_8h.html#a240">ObjectT</a> o, <font class="keywordtype">int</font> iCycles,00201                                        <font class="keywordtype">int</font> iDashPower, <a class="code" href="classVecPosition.html">VecPosition</a> *velocity )00202 {00203   <a class="code" href="classVecPosition.html">VecPosition</a> vel = <a class="code" href="classWorldModel.html#a53">getGlobalVelocity</a>( o );00204   <a class="code" href="classVecPosition.html">VecPosition</a> pos = <a class="code" href="classWorldModel.html#a51">getGlobalPosition</a>( o );00205 00206   <font class="keywordflow">if</font>( o == <a class="code" href="SoccerTypes_8h.html#a240a24">OBJECT_BALL</a> )00207   {00208     <font class="comment">// get the speed and the distance it travels in iCycle's.</font>00209     <font class="comment">// use this distance and direction it travels in, to calculate new pos</font>00210     <font class="comment">// geom series is serie s=a+ar+..+ar^n...decay=r,iCycles=n,dSpeed=a</font>00211     <font class="keywordtype">double</font> dDist = <a class="code" href="classGeometry.html#d1">Geometry::getSumGeomSeries</a>( vel.<a class="code" href="classVecPosition.html#a32">getMagnitude</a>(),00212                                                <a class="code" href="classWorldModel.html#o0">SS</a>-&gt;<a class="code" href="classServerSettings.html#a60">getBallDecay</a>(),00213                                                (double)iCycles);00214     pos          += <a class="code" href="classVecPosition.html">VecPosition</a>( dDist, vel.<a class="code" href="classVecPosition.html#a33">getDirection</a>(), POLAR );00215   }

⌨️ 快捷键说明

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