worldmodelpredict_8c-source.html

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

HTML
310
字号
00216   <font class="keywordflow">else</font> <font class="keywordflow">if</font>( <a class="code" href="classSoccerTypes.html#d13">SoccerTypes::isKnownPlayer</a>( o ) )00217   {00218     <font class="keywordtype">double</font>      dDirection = 0.0; <font class="comment">// used when no info about global body</font>00219     <a class="code" href="classStamina.html">Stamina</a>     stamina;          <font class="comment">// used when object is agent</font>00220 00221     <font class="keywordflow">if</font>( <a class="code" href="classWorldModel.html#a34">getAgentObjectType</a>() == o )00222     {00223       dDirection = <a class="code" href="classWorldModel.html#a38">getAgentGlobalBodyAngle</a>();00224       stamina    = <a class="code" href="classWorldModel.html#a39">getAgentStamina</a>();00225     }00226     <font class="keywordflow">else</font> <font class="keywordflow">if</font>( <a class="code" href="classWorldModel.html#a57">getTimeGlobalAngles</a>(o) &gt; <a class="code" href="classWorldModel.html#a4">getCurrentTime</a>() - 2 )00227       dDirection = <a class="code" href="classWorldModel.html#a58">getGlobalBodyAngle</a>(o);00228 00229     <font class="keywordflow">for</font>( <font class="keywordtype">int</font> i = 0; i &lt; iCycles ; i ++ )00230       <a class="code" href="classWorldModel.html#a105">predictStateAfterDash</a>( iDashPower, &amp;pos, &amp;vel, &amp;stamina, dDirection );00231   }00232   <font class="keywordflow">if</font>( velocity != NULL )00233     *velocity = vel;00234   <font class="keywordflow">return</font> pos;00235 }00236 <a name="l00243"></a><a class="code" href="classWorldModel.html#a108">00243</a> <a class="code" href="classVecPosition.html">VecPosition</a> <a class="code" href="classWorldModel.html#a108">WorldModel::predictAgentPos</a>( <font class="keywordtype">int</font> iCycles, <font class="keywordtype">int</font> iDashPower )00244 {00245   <font class="keywordflow">return</font> <a class="code" href="classWorldModel.html#a107">predictPosAfterNrCycles</a>( <a class="code" href="classWorldModel.html#a34">getAgentObjectType</a>(), iCycles, iDashPower);00246 }00247 <a name="l00256"></a><a class="code" href="classWorldModel.html#a109">00256</a> <font class="keywordtype">int</font> <a class="code" href="classWorldModel.html#a109">WorldModel::predictNrCyclesToPoint</a>( <a class="code" href="SoccerTypes_8h.html#a240">ObjectT</a> o, <a class="code" href="classVecPosition.html">VecPosition</a> posTo,00257                                         <a class="code" href="Geometry_8h.html#a2">AngDeg</a> angToTurn )00258 {00259   <a class="code" href="classVecPosition.html">VecPosition</a> posGlobal        = <a class="code" href="classWorldModel.html#a51">getGlobalPosition</a>( o );00260   <a class="code" href="Geometry_8h.html#a2">AngDeg</a>      angBody;00261   <a class="code" href="Geometry_8h.html#a2">AngDeg</a>      ang;00262 00263   <font class="keywordflow">if</font>( <a class="code" href="classWorldModel.html#a34">getAgentObjectType</a>() == o )00264     angBody = <a class="code" href="classWorldModel.html#a38">getAgentGlobalBodyAngle</a>();00265   <font class="keywordflow">else</font> <font class="keywordflow">if</font>( fabs(<a class="code" href="classWorldModel.html#a57">getTimeGlobalAngles</a>(o)-<a class="code" href="classWorldModel.html#a4">getCurrentTime</a>()) &lt; 2 )00266     angBody = <a class="code" href="classWorldModel.html#a58">getGlobalBodyAngle</a>( o );00267   <font class="keywordflow">else</font>00268     angBody = 180;00269 00270   <font class="keywordtype">int</font> iExtraCycles;00271   ang = fabs(angBody-(posTo-posGlobal).getDirection());00272   <font class="keywordflow">if</font>( ang &gt; 20 &amp;&amp; ang &lt; 100 )00273     iExtraCycles = 1;00274   <font class="keywordflow">else</font> <font class="keywordflow">if</font>( ang &gt; 100 )00275     iExtraCycles = 2;00276   <font class="keywordflow">else</font>00277     iExtraCycles = 0;00278 00279   <font class="keywordflow">if</font>( posGlobal.<a class="code" href="classVecPosition.html#a30">getDistanceTo</a>( posTo ) &lt; <a class="code" href="classWorldModel.html#o0">SS</a>-&gt;<a class="code" href="classServerSettings.html#a210">getMaximalKickDist</a>() )00280     <font class="keywordflow">return</font> 0;00281   <font class="keywordflow">else</font>00282     <font class="keywordflow">return</font> iExtraCycles + int((posGlobal.<a class="code" href="classVecPosition.html#a30">getDistanceTo</a>( posTo )00283            /<a class="code" href="classWorldModel.html#o0">SS</a>-&gt;<a class="code" href="classServerSettings.html#a14">getPlayerSpeedMax</a>()));00284 }00285 <a name="l00291"></a><a class="code" href="classWorldModel.html#a110">00291</a> <font class="keywordtype">int</font> <a class="code" href="classWorldModel.html#a110">WorldModel::predictNrCyclesToObject</a>( <a class="code" href="SoccerTypes_8h.html#a240">ObjectT</a> objFrom, <a class="code" href="SoccerTypes_8h.html#a240">ObjectT</a> objTo )00292 {00293   <font class="keywordflow">if</font>( objFrom == <a class="code" href="SoccerTypes_8h.html#a240a113">OBJECT_ILLEGAL</a> || objTo == <a class="code" href="SoccerTypes_8h.html#a240a113">OBJECT_ILLEGAL</a> ||00294       <a class="code" href="classWorldModel.html#a51">getGlobalPosition</a>( objFrom ).<a class="code" href="classVecPosition.html#a30">getDistanceTo</a>( <a class="code" href="classWorldModel.html#a51">getGlobalPosition</a>( objTo )00295       ) &gt; 50 )00296     <font class="keywordflow">return</font> 101;00297 00298   <font class="keywordtype">int</font>         iCycles      = 0;00299   <font class="keywordtype">int</font>         iCyclesToObj = 100;00300   <a class="code" href="classVecPosition.html">VecPosition</a> posObj;00301 00302   <font class="keywordflow">while</font>( iCycles &lt;= iCyclesToObj &amp;&amp; iCycles &lt; 100)00303   {00304     iCycles      = iCycles + 1  ;00305     posObj       = <a class="code" href="classWorldModel.html#a107">predictPosAfterNrCycles</a>( objTo, iCycles );00306     iCyclesToObj = <a class="code" href="classWorldModel.html#a109">predictNrCyclesToPoint</a>( objFrom, posObj,00307                                            <a class="code" href="classWorldModel.html#o1">PS</a>-&gt;<a class="code" href="classPlayerSettings.html#a9">getPlayerWhenToTurnAngle</a>() );00308   }00309   <font class="keywordflow">if</font>( iCycles == 100 )00310     printf( <font class="stringliteral">"(WorldModel::predictNrCyclesToObject) More than 100 cycles??\n"</font> );00311 00312   <font class="keywordflow">return</font> iCyclesToObj;00313 }00314 00315 00316 <a name="l00323"></a><a class="code" href="classWorldModel.html#a111">00323</a> <font class="keywordtype">void</font> <a class="code" href="classWorldModel.html#a111">WorldModel::predictStaminaAfterDash</a>( <font class="keywordtype">double</font> dPower, <a class="code" href="classStamina.html">Stamina</a> *stamina )00324 {00325   <font class="keywordtype">double</font> sta = stamina-&gt;<a class="code" href="classStamina.html#a2">getStamina</a>();00326   <font class="keywordtype">double</font> eff = stamina-&gt;<a class="code" href="classStamina.html#a4">getEffort</a>();00327   <font class="keywordtype">double</font> rec = stamina-&gt;<a class="code" href="classStamina.html#a6">getRecovery</a>();00328 00329   <font class="comment">// double negative value when dashed backwards</font>00330   sta -= ( dPower &gt; 0.0 ) ? dPower : -2*dPower ;00331   <font class="keywordflow">if</font>( sta &lt; 0 ) sta = 0;00332 00333   <font class="comment">// stamina below recovery threshold, lower recovery</font>00334   <font class="keywordflow">if</font>( sta &lt;= <a class="code" href="classWorldModel.html#o0">SS</a>-&gt;<a class="code" href="classServerSettings.html#a22">getRecoverDecThr</a>()*<a class="code" href="classWorldModel.html#o0">SS</a>-&gt;<a class="code" href="classServerSettings.html#a18">getStaminaMax</a>() &amp;&amp;00335                          rec &gt; <a class="code" href="classWorldModel.html#o0">SS</a>-&gt;<a class="code" href="classServerSettings.html#a26">getRecoverMin</a>() )00336       rec -= <a class="code" href="classWorldModel.html#o0">SS</a>-&gt;<a class="code" href="classServerSettings.html#a24">getRecoverDec</a>();00337 00338   <font class="comment">// stamina below effort decrease threshold, lower effort</font>00339   <font class="keywordflow">if</font>( sta &lt;= <a class="code" href="classWorldModel.html#o0">SS</a>-&gt;<a class="code" href="classServerSettings.html#a28">getEffortDecThr</a>()*<a class="code" href="classWorldModel.html#o0">SS</a>-&gt;<a class="code" href="classServerSettings.html#a18">getStaminaMax</a>() &amp;&amp;00340                    eff &gt; <a class="code" href="classWorldModel.html#o0">SS</a>-&gt;<a class="code" href="classServerSettings.html#a36">getEffortMin</a>() )00341       eff -= <a class="code" href="classWorldModel.html#o0">SS</a>-&gt;<a class="code" href="classServerSettings.html#a30">getEffortDec</a>();00342 00343   <font class="comment">// stamina higher than effort incr threshold, raise effort and check maximum</font>00344   <font class="keywordflow">if</font>( sta &gt;= <a class="code" href="classWorldModel.html#o0">SS</a>-&gt;<a class="code" href="classServerSettings.html#a32">getEffortIncThr</a>() * <a class="code" href="classWorldModel.html#o0">SS</a>-&gt;<a class="code" href="classServerSettings.html#a18">getStaminaMax</a>() &amp;&amp;00345       eff &lt; 1.0)00346   {00347     eff += <a class="code" href="classWorldModel.html#o0">SS</a>-&gt;<a class="code" href="classServerSettings.html#a34">getEffortInc</a>();00348     <font class="keywordflow">if</font> ( eff &gt; 1.0 )00349        eff = 1.0;00350   }00351 00352   <font class="comment">// increase stamina with (new) recovery value and check for maximum</font>00353   sta += rec*<a class="code" href="classWorldModel.html#o0">SS</a>-&gt;<a class="code" href="classServerSettings.html#a20">getStaminaIncMax</a>();00354   <font class="keywordflow">if</font> ( sta &gt; <a class="code" href="classWorldModel.html#o0">SS</a>-&gt;<a class="code" href="classServerSettings.html#a18">getStaminaMax</a>() )00355     sta = <a class="code" href="classWorldModel.html#o0">SS</a>-&gt;<a class="code" href="classServerSettings.html#a18">getStaminaMax</a>();00356 00357   stamina-&gt;<a class="code" href="classStamina.html#a3">setStamina</a> ( sta );00358   stamina-&gt;<a class="code" href="classStamina.html#a5">setEffort</a>  ( eff );00359   stamina-&gt;<a class="code" href="classStamina.html#a7">setRecovery</a>( rec );00360 }00361 <a name="l00372"></a><a class="code" href="classWorldModel.html#a112">00372</a> <font class="keywordtype">bool</font> <a class="code" href="classWorldModel.html#a112">WorldModel::isCollisionAfterDash</a>( <a class="code" href="classSoccerCommand.html">SoccerCommand</a> soc )00373 {00374   <font class="keywordflow">if</font>( soc.<a class="code" href="classSoccerCommand.html#m1">commandType</a> != <a class="code" href="SoccerTypes_8h.html#a247a181">CMD_DASH</a> )00375     <font class="keywordflow">return</font> <font class="keyword">false</font>;00376 00377   <a class="code" href="classVecPosition.html">VecPosition</a> posPred = <a class="code" href="classWorldModel.html#a104">predictAgentPosAfterCommand</a>( soc );00378   <a class="code" href="classVecPosition.html">VecPosition</a> pos;00379 00380   <font class="keywordflow">for</font>( <font class="keywordtype">int</font> i = 0 ; i &lt; <a class="code" href="SoccerTypes_8h.html#a0">MAX_TEAMMATES</a>; i ++ )00381   {00382     <font class="keywordflow">if</font>( <a class="code" href="classWorldModel.html#a135">isConfidenceGood</a>( <a class="code" href="classWorldModel.html#o15">Teammates</a>[i].getType() ) )00383       pos = <a class="code" href="classWorldModel.html#a107">predictPosAfterNrCycles</a>( <a class="code" href="classWorldModel.html#o15">Teammates</a>[i].getType(), 1, 100 );00384     <font class="keywordflow">if</font>( pos.<a class="code" href="classVecPosition.html#a30">getDistanceTo</a>( posPred ) &lt; <a class="code" href="classWorldModel.html#o0">SS</a>-&gt;<a class="code" href="classServerSettings.html#a6">getPlayerSize</a>() )00385       <font class="keywordflow">return</font> <font class="keyword">true</font>;00386   }00387 00388   <font class="keywordflow">for</font>( <font class="keywordtype">int</font> i = 0 ; i &lt; <a class="code" href="SoccerTypes_8h.html#a1">MAX_OPPONENTS</a>; i ++ )00389   {00390     <font class="keywordflow">if</font>( <a class="code" href="classWorldModel.html#a135">isConfidenceGood</a>( <a class="code" href="classWorldModel.html#o16">Opponents</a>[i].getType() ) )00391       pos = <a class="code" href="classWorldModel.html#a107">predictPosAfterNrCycles</a>( <a class="code" href="classWorldModel.html#o16">Opponents</a>[i].getType(), 1, 100 );00392     <font class="keywordflow">if</font>( pos.<a class="code" href="classVecPosition.html#a30">getDistanceTo</a>( posPred ) &lt; <a class="code" href="classWorldModel.html#o0">SS</a>-&gt;<a class="code" href="classServerSettings.html#a6">getPlayerSize</a>() )00393       <font class="keywordflow">return</font> <font class="keyword">true</font>;00394   }00395   <font class="keywordflow">return</font> <font class="keyword">false</font>;00396 }00397 </pre></div><hr><address><small>Generated on Thu Mar 7 00:37:44 2002 for UvA Trilearn 2001 by<a href="http://www.doxygen.org/index.html"><img src="doxygen.gif" alt="doxygen" align="middle" border=0 width=110 height=53></a>1.2.12 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>, &copy;&nbsp;1997-2001</small></address></body></html>

⌨️ 快捷键说明

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