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) > <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 < iCycles ; i ++ )00230 <a class="code" href="classWorldModel.html#a105">predictStateAfterDash</a>( iDashPower, &pos, &vel, &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>()) < 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 > 20 && ang < 100 )00273 iExtraCycles = 1;00274 <font class="keywordflow">else</font> <font class="keywordflow">if</font>( ang > 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 ) < <a class="code" href="classWorldModel.html#o0">SS</a>-><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>-><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 ) > 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 <= iCyclesToObj && iCycles < 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>-><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-><a class="code" href="classStamina.html#a2">getStamina</a>();00326 <font class="keywordtype">double</font> eff = stamina-><a class="code" href="classStamina.html#a4">getEffort</a>();00327 <font class="keywordtype">double</font> rec = stamina-><a class="code" href="classStamina.html#a6">getRecovery</a>();00328 00329 <font class="comment">// double negative value when dashed backwards</font>00330 sta -= ( dPower > 0.0 ) ? dPower : -2*dPower ;00331 <font class="keywordflow">if</font>( sta < 0 ) sta = 0;00332 00333 <font class="comment">// stamina below recovery threshold, lower recovery</font>00334 <font class="keywordflow">if</font>( sta <= <a class="code" href="classWorldModel.html#o0">SS</a>-><a class="code" href="classServerSettings.html#a22">getRecoverDecThr</a>()*<a class="code" href="classWorldModel.html#o0">SS</a>-><a class="code" href="classServerSettings.html#a18">getStaminaMax</a>() &&00335 rec > <a class="code" href="classWorldModel.html#o0">SS</a>-><a class="code" href="classServerSettings.html#a26">getRecoverMin</a>() )00336 rec -= <a class="code" href="classWorldModel.html#o0">SS</a>-><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 <= <a class="code" href="classWorldModel.html#o0">SS</a>-><a class="code" href="classServerSettings.html#a28">getEffortDecThr</a>()*<a class="code" href="classWorldModel.html#o0">SS</a>-><a class="code" href="classServerSettings.html#a18">getStaminaMax</a>() &&00340 eff > <a class="code" href="classWorldModel.html#o0">SS</a>-><a class="code" href="classServerSettings.html#a36">getEffortMin</a>() )00341 eff -= <a class="code" href="classWorldModel.html#o0">SS</a>-><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 >= <a class="code" href="classWorldModel.html#o0">SS</a>-><a class="code" href="classServerSettings.html#a32">getEffortIncThr</a>() * <a class="code" href="classWorldModel.html#o0">SS</a>-><a class="code" href="classServerSettings.html#a18">getStaminaMax</a>() &&00345 eff < 1.0)00346 {00347 eff += <a class="code" href="classWorldModel.html#o0">SS</a>-><a class="code" href="classServerSettings.html#a34">getEffortInc</a>();00348 <font class="keywordflow">if</font> ( eff > 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>-><a class="code" href="classServerSettings.html#a20">getStaminaIncMax</a>();00354 <font class="keywordflow">if</font> ( sta > <a class="code" href="classWorldModel.html#o0">SS</a>-><a class="code" href="classServerSettings.html#a18">getStaminaMax</a>() )00355 sta = <a class="code" href="classWorldModel.html#o0">SS</a>-><a class="code" href="classServerSettings.html#a18">getStaminaMax</a>();00356 00357 stamina-><a class="code" href="classStamina.html#a3">setStamina</a> ( sta );00358 stamina-><a class="code" href="classStamina.html#a5">setEffort</a> ( eff );00359 stamina-><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 < <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 ) < <a class="code" href="classWorldModel.html#o0">SS</a>-><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 < <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 ) < <a class="code" href="classWorldModel.html#o0">SS</a>-><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>, © 1997-2001</small></address></body></html>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?