worldmodelupdate_8c-source.html

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

HTML
629
字号
00174         d-&gt;<a class="code" href="classDynamicObject.html#a1">setRelativeDistanceChange</a>( dDistChange, time );00175       <font class="keywordflow">if</font>( dDirChange != <a class="code" href="SoccerTypes_8h.html#a19">UnknownDoubleValue</a> )00176         d-&gt;<a class="code" href="classDynamicObject.html#a3">setRelativeAngleChange</a>( dDirChange, time );00177       <font class="keywordflow">if</font>( angRelBodyAng != <a class="code" href="SoccerTypes_8h.html#a20">UnknownAngleValue</a> )00178         ((<a class="code" href="classPlayerObject.html">PlayerObject</a>*)d)-&gt;setRelativeBodyAngle( angRelBodyAng, time );00179       <font class="keywordflow">if</font>( angRelNeckAng != <a class="code" href="SoccerTypes_8h.html#a20">UnknownAngleValue</a> )00180         ((<a class="code" href="classPlayerObject.html">PlayerObject</a>*)d)-&gt;setRelativeNeckAngle( angRelNeckAng, time );00181       <font class="keywordflow">if</font>( isGoalie == <font class="keyword">true</font> &amp;&amp; <a class="code" href="classSoccerTypes.html#d12">SoccerTypes::isPlayer</a>( o ))00182         ((<a class="code" href="classPlayerObject.html">PlayerObject</a>*)d)-&gt;setIsGoalie( <font class="keyword">true</font> );00183       <font class="keywordflow">else</font> <font class="keywordflow">if</font>( <a class="code" href="classSoccerTypes.html#d12">SoccerTypes::isPlayer</a>( o ))00184         ((<a class="code" href="classPlayerObject.html">PlayerObject</a>*)d)-&gt;setIsGoalie( <font class="keyword">false</font> );00185       d-&gt;<a class="code" href="classObject.html#a5">setType</a>( o );00186       d-&gt;<a class="code" href="classObject.html#a20">setTimeLastSeen</a>( time );00187     }00188   }00189   <font class="keywordflow">else</font> <font class="keywordflow">if</font>( <a class="code" href="classSoccerTypes.html#d4">SoccerTypes::isLine</a>( o ) )00190   {00191     <font class="comment">// angle returned is angle of neck angle with line, convert to angle</font>00192     <font class="comment">// of neck with orthogonal to line</font>00193     iDir = ( iDir &lt; 0 ) ? (90 + iDir ) : - (90 - iDir );00194     <a class="code" href="classWorldModel.html#o20">Lines</a>[<a class="code" href="classSoccerTypes.html#d14">SoccerTypes::getIndex</a>(o)].setRelativePosition(dDist,(<font class="keywordtype">double</font>)iDir,time);00195     <a class="code" href="classWorldModel.html#o20">Lines</a>[<a class="code" href="classSoccerTypes.html#d14">SoccerTypes::getIndex</a>(o)].setTimeLastSeen( time );00196     <a class="code" href="classWorldModel.html#o20">Lines</a>[<a class="code" href="classSoccerTypes.html#d14">SoccerTypes::getIndex</a>(o)].setType( o );00197   }00198 }00199 <a name="l00207"></a><a class="code" href="classWorldModel.html#a92">00207</a> <font class="keywordtype">bool</font> <a class="code" href="classWorldModel.html#a92">WorldModel::processPerfectHearInfoBall</a>( <a class="code" href="classVecPosition.html">VecPosition</a> posGlobal,00208                              <a class="code" href="classVecPosition.html">VecPosition</a> vel, <font class="keywordtype">double</font> dConf )00209 {00210   <font class="keywordflow">if</font>( <a class="code" href="classWorldModel.html#o13">Ball</a>.<a class="code" href="classObject.html#a4">getConfidence</a>( <a class="code" href="classWorldModel.html#a4">getCurrentTime</a>() ) &lt; dConf )00211   {00212     <a class="code" href="classTime.html">Time</a> time = <a class="code" href="classWorldModel.html#a139">getTimeFromConfidence</a>( dConf );00213     <a class="code" href="classWorldModel.html#o13">Ball</a>.<a class="code" href="classObject.html#a12">setGlobalPosition</a>( posGlobal, time );00214     <a class="code" href="classWorldModel.html#o13">Ball</a>.<a class="code" href="classDynamicObject.html#a7">setGlobalVelocity</a>( vel,       time );00215     <a class="code" href="classWorldModel.html#c10">updateObjectRelativeFromGlobal</a>( <a class="code" href="SoccerTypes_8h.html#a240a24">OBJECT_BALL</a> );00216     <font class="keywordflow">return</font> <font class="keyword">true</font>;00217   }00218   <font class="keywordflow">return</font> <font class="keyword">false</font>;00219 }00220 <a name="l00232"></a><a class="code" href="classWorldModel.html#a91">00232</a> <font class="keywordtype">bool</font> <a class="code" href="classWorldModel.html#a91">WorldModel::processPerfectHearInfo</a>( <a class="code" href="SoccerTypes_8h.html#a240">ObjectT</a> o, <a class="code" href="classVecPosition.html">VecPosition</a> posGlobal,00233                                          <font class="keywordtype">double</font> dConf, <font class="keywordtype">bool</font> bIsGoalie )00234 {00235   <font class="keywordflow">if</font>( <a class="code" href="classSoccerTypes.html#d8">SoccerTypes::isBall</a>( o ) || o == <a class="code" href="classWorldModel.html#a34">getAgentObjectType</a>() )00236     <font class="keywordflow">return</font> <font class="keyword">false</font>; <font class="comment">// ball should be called with processPerfectHearInfoBall</font>00237   <font class="keywordflow">else</font> <font class="keywordflow">if</font>( !<a class="code" href="classSoccerTypes.html#d13">SoccerTypes::isKnownPlayer</a>( o ) )00238     <font class="keywordflow">return</font> <a class="code" href="classWorldModel.html#a93">processUnsureHearInfo</a>( o, posGlobal, dConf );00239 00240   <a class="code" href="classPlayerObject.html">PlayerObject</a> *object = (<a class="code" href="classPlayerObject.html">PlayerObject</a> *)<a class="code" href="classWorldModel.html#c0">getObjectPtrFromType</a>( o );00241   <font class="keywordflow">if</font>( object == NULL )00242     <font class="keywordflow">return</font> <font class="keyword">false</font>;00243 00244   <a class="code" href="classTime.html">Time</a> time = <a class="code" href="classWorldModel.html#a139">getTimeFromConfidence</a>( dConf ) ;00245 00246   <font class="comment">// if we are not sure about the exact player number of this player in</font>00247   <font class="comment">// the world model (getIsKnownPlayer() == false) we overwrite the</font>00248   <font class="comment">// information of this player since the player who said this information</font>00249   <font class="comment">// is sure about it (otherwise processUnsureHearInfo would be called instead</font>00250   <font class="comment">// of processPERFECTHearInfo)</font>00251   <font class="keywordflow">if</font>( object-&gt;<a class="code" href="classObject.html#a4">getConfidence</a>( <a class="code" href="classWorldModel.html#a4">getCurrentTime</a>() ) &lt; dConf ||00252       object-&gt;<a class="code" href="classPlayerObject.html#a4">getIsKnownPlayer</a>() == <font class="keyword">false</font>  )00253   {00254     object-&gt;<a class="code" href="classObject.html#a12">setGlobalPosition</a>     ( posGlobal         , time );00255     object-&gt;<a class="code" href="classObject.html#a20">setTimeLastSeen</a>       ( time                     );00256     object-&gt;<a class="code" href="classDynamicObject.html#a7">setGlobalVelocity</a>     ( <a class="code" href="classVecPosition.html">VecPosition</a>( 0, 0), time );00257     object-&gt;<a class="code" href="classPlayerObject.html#a3">setIsKnownPlayer</a>      ( <font class="keyword">true</font>                     );00258     object-&gt;<a class="code" href="classPlayerObject.html#a5">setIsGoalie</a>           ( bIsGoalie                );00259     <a class="code" href="classWorldModel.html#c10">updateObjectRelativeFromGlobal</a>( o                        );00260     <font class="keywordflow">return</font> <font class="keyword">true</font>;00261   }00262   <font class="keywordflow">return</font> <font class="keyword">false</font>;00263 }00264 <a name="l00276"></a><a class="code" href="classWorldModel.html#a93">00276</a> <font class="keywordtype">bool</font> <a class="code" href="classWorldModel.html#a93">WorldModel::processUnsureHearInfo</a>( <a class="code" href="SoccerTypes_8h.html#a240">ObjectT</a> o, <a class="code" href="classVecPosition.html">VecPosition</a> pos,00277                                                <font class="keywordtype">double</font> dConf )00278 {00279   <font class="keywordtype">double</font>     dMinDist;        <font class="comment">// used to find closest player to pos</font>00280   <a class="code" href="SoccerTypes_8h.html#a240">ObjectT</a>    objInitial = o;00281 00282   <font class="keywordflow">if</font>( o != <a class="code" href="SoccerTypes_8h.html#a240a96">OBJECT_TEAMMATE_UNKNOWN</a> &amp;&amp; o != <a class="code" href="SoccerTypes_8h.html#a240a108">OBJECT_OPPONENT_UNKNOWN</a> )00283     <font class="keywordflow">return</font> <font class="keyword">false</font>;00284 00285   <font class="comment">// if o is a teammate find closest teammate to pos and store distance</font>00286   <font class="keywordflow">if</font>( <a class="code" href="classSoccerTypes.html#d9">SoccerTypes::isTeammate</a>( o ) )00287     o = <a class="code" href="classWorldModel.html#a116">getClosestInSetTo</a>( <a class="code" href="SoccerTypes_8h.html#a241a115">OBJECT_SET_TEAMMATES</a>, pos, &amp;dMinDist);00288   <font class="keywordflow">else</font> <font class="keywordflow">if</font>( <a class="code" href="classSoccerTypes.html#d10">SoccerTypes::isOpponent</a>( o ) )  <font class="comment">// if o is an opponent, do the same</font>00289     o = <a class="code" href="classWorldModel.html#a116">getClosestInSetTo</a>( <a class="code" href="SoccerTypes_8h.html#a241a116">OBJECT_SET_OPPONENTS</a>, pos, &amp;dMinDist);00290 00291   <font class="keywordflow">if</font>( o == <a class="code" href="classWorldModel.html#a34">getAgentObjectType</a>() &amp;&amp; 00292      pos.<a class="code" href="classVecPosition.html#a30">getDistanceTo</a>(<a class="code" href="classWorldModel.html#a43">getAgentGlobalPosition</a>())&lt;<a class="code" href="classWorldModel.html#o1">PS</a>-&gt;<a class="code" href="classPlayerSettings.html#a7">getPlayerDistTolerance</a>())00293     <font class="keywordflow">return</font> <font class="keyword">false</font>;  <font class="comment">// do not update my own position, localization is better</font>00294 00295   <font class="comment">// if opponent or teammate was found and distance lies in tolerance distance</font>00296   <font class="comment">//  update this opponent or teammate with the specified information.</font>00297   <font class="comment">// else put the information in the first player position of which we have</font>00298   <font class="comment">//  no information.</font>00299   <font class="keywordflow">else</font> <font class="keywordflow">if</font>( <a class="code" href="classSoccerTypes.html#d13">SoccerTypes::isKnownPlayer</a>(o) &amp;&amp; 00300            dMinDist &lt; <a class="code" href="classWorldModel.html#o1">PS</a>-&gt;<a class="code" href="classPlayerSettings.html#a7">getPlayerDistTolerance</a>())00301   {00302     <a class="code" href="classWorldModel.html#a91">processPerfectHearInfo</a>( o, pos, dConf );00303     <font class="keywordflow">return</font> <font class="keyword">true</font>;00304   }00305 00306   <font class="keywordflow">if</font>( objInitial == <a class="code" href="SoccerTypes_8h.html#a240a96">OBJECT_TEAMMATE_UNKNOWN</a> )00307     o = <a class="code" href="classWorldModel.html#a126">getFirstEmptySpotInSet</a>( <a class="code" href="SoccerTypes_8h.html#a241a115">OBJECT_SET_TEAMMATES</a> );00308   <font class="keywordflow">else</font> <font class="keywordflow">if</font>( objInitial == <a class="code" href="SoccerTypes_8h.html#a240a108">OBJECT_OPPONENT_UNKNOWN</a> )00309     o = <a class="code" href="classWorldModel.html#a126">getFirstEmptySpotInSet</a>( <a class="code" href="SoccerTypes_8h.html#a241a116">OBJECT_SET_OPPONENTS</a> );00310   <font class="keywordflow">else</font>00311     <font class="keywordflow">return</font> <font class="keyword">false</font> ;  <font class="comment">// in case of OBJECT_PLAYER_UNKNOWN</font>00312 00313   <font class="keywordflow">if</font>( o != <a class="code" href="SoccerTypes_8h.html#a240a113">OBJECT_ILLEGAL</a> )   <font class="comment">// can be the case that there is no empty spot</font>00314   {00315     <a class="code" href="classWorldModel.html#a91">processPerfectHearInfo</a>( o, pos, dConf );00316     <a class="code" href="classWorldModel.html#a66">setIsKnownPlayer</a>( o, <font class="keyword">false</font> );00317   }00318   <font class="keywordflow">return</font> <font class="keyword">true</font>;00319 }00320 <a name="l00341"></a><a class="code" href="classWorldModel.html#a94">00341</a> <font class="keywordtype">bool</font> <a class="code" href="classWorldModel.html#a94">WorldModel::processNewHeteroPlayer</a>( <font class="keywordtype">int</font> iIndex,     <font class="keywordtype">double</font> dPlayerSpeedMax,00342             <font class="keywordtype">double</font> dStaminaIncMax, <font class="keywordtype">double</font> dPlayerDecay,  <font class="keywordtype">double</font> dInertiaMoment,00343             <font class="keywordtype">double</font> dDashPowerRate, <font class="keywordtype">double</font> dPlayerSize,   <font class="keywordtype">double</font> dKickableMargin,00344             <font class="keywordtype">double</font> dKickRand,      <font class="keywordtype">double</font> dExtraStamina, <font class="keywordtype">double</font> dEffortMax,00345             <font class="keywordtype">double</font> dEffortMin )00346 {00347    <a class="code" href="classWorldModel.html#o2">pt</a>[iIndex].<a class="code" href="classHeteroPlayerSettings.html#m0">dPlayerSpeedMax</a> = dPlayerSpeedMax;00348    <a class="code" href="classWorldModel.html#o2">pt</a>[iIndex].<a class="code" href="classHeteroPlayerSettings.html#m1">dStaminaIncMax</a>  = dStaminaIncMax;

⌨️ 快捷键说明

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