00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00041 #include"Objects.h"
00042
00043 #include<stdlib.h>
00044 #include<iostream.h>
00045 #ifdef Solaris
00046 #include <strings.h>
00047 #else
00048 #include <string.h>
00049 #endif
00050
00051
00052
00053
00054
00057 Object::Object( )
00058 {
00059 objectType = OBJECT_ILLEGAL;
00060 }
00061
00065 AngDeg Object::getRelativeAngle( )
00066 {
00067 return VecPosition::normalizeAngle(posRelative.getDirection());
00068 }
00069
00073 double Object::getRelativeDistance( )
00074 {
00075 return posRelative.getMagnitude();
00076 }
00077
00083 double Object::getConfidence( Time time )
00084 {
00085 if( timeLastSeen.getTime() == -1 )
00086 return 0.0;
00087
00088 return max( 0.0, 1.0-(double)(time.getTimeDifference(timeLastSeen))/100.0);
00089 }
00090
00094 bool Object::setType( ObjectT o )
00095 {
00096 objectType = o;
00097 return true;
00098 }
00099
00102 ObjectT Object::getType() const
00103 {
00104 return objectType;
00105 }
00106
00114 bool Object::setRelativePosition( double dDist, AngDeg ang, Time time )
00115 {
00116 posRelative.setVecPosition( dDist, ang, POLAR );
00117 setTimeRelativePosition( time );
00118 return true;
00119 }
00120
00126 bool Object::setRelativePosition( VecPosition v, Time time )
00127 {
00128 posRelative = v;
00129 setTimeRelativePosition( time );
00130 return true;
00131 }
00132
00138 VecPosition Object::getRelativePosition() const
00139 {
00140 return posRelative;
00141 }
00142
00146 bool Object::setTimeRelativePosition( Time time )
00147 {
00148 timeRelativePosition = time;
00149 return true;
00150 }
00151
00155 Time Object::getTimeRelativePosition() const
00156 {
00157 return timeRelativePosition;
00158 }
00159
00165 bool Object::setGlobalPosition( VecPosition p, Time time )
00166 {
00167 posGlobal = p;
00168 setTimeGlobalPosition( time );
00169 return true;
00170 }
00171
00177 VecPosition Object::getGlobalPosition() const
00178 {
00179 return posGlobal;
00180 }
00181
00185 bool Object::setTimeGlobalPosition( Time time )
00186 {
00187 timeGlobalPosition = time;
00188 return true;
00189 }
00190
00194 Time Object::getTimeGlobalPosition() const
00195 {
00196 return timeGlobalPosition;
00197 }
00198
00206 bool Object::setGlobalPositionLastSee( VecPosition p, Time time )
00207 {
00208 posGlobalLastSee = p;
00209 setTimeGlobalPosDerivedFromSee( time );
00210 return true;
00211 }
00212
00217 VecPosition Object::getGlobalPositionLastSee() const
00218 {
00219 return posGlobalLastSee;
00220 }
00221
00226 bool Object::setTimeGlobalPosDerivedFromSee( Time time )
00227 {
00228 timeGlobalPosDerivedFromSee = time;
00229 return true;
00230 }
00231
00235 Time Object::getTimeGlobalPosDerivedFromSee() const
00236 {
00237 return timeGlobalPosDerivedFromSee;
00238 }
00239
00244 bool Object::setTimeLastSeen( Time time)
00245 {
00246 timeLastSeen = time;
00247 return true;
00248 }
00249
00253 Time Object::getTimeLastSeen() const
00254 {
00255 return timeLastSeen;
00256 }
00257
00258
00259
00260
00261
00262
00266 void FixedObject::show( ostream & os )
00267 {
00268 char buf[MAX_TEAM_NAME_LENGTH];
00269
00270
00271 SoccerTypes::getObjectStr( buf, objectType, DEFAULT_TEAM_NAME );
00272 os << buf
00273 << " rel(" << posRelative << " r:" << posRelative.getMagnitude()
00274 << " phi:" << posRelative.getDirection()
00275 << " t:" << timeRelativePosition << ")"
00276 << " seen:" << timeLastSeen << endl;
00277 }
00278
00287 VecPosition FixedObject::getGlobalPosition( SideT s, double dGoalWidth )const
00288 {
00289 return SoccerTypes::getGlobalPositionFlag( getType(), s, dGoalWidth );
00290 }
00291
00298 AngDeg FixedObject::getGlobalAngle( SideT s )
00299 {
00300 return SoccerTypes::getGlobalAngleLine( getType(), s );
00301 }
00302
00303
00304
00305
00306
00309 DynamicObject::DynamicObject( ):Object( )
00310 {
00311 dRelativeDistanceChange = UnknownDoubleValue;
00312 dRelativeAngleChange = UnknownDoubleValue;
00313 }
00314
00320 bool DynamicObject::setGlobalVelocity( VecPosition v, Time time)
00321 {
00322 if( v.getMagnitude() < EPSILON )
00323 vecGlobalVelocity.setVecPosition( 0.0, 0.0 );
00324 else
00325 vecGlobalVelocity = v;
00326 setTimeGlobalVelocity( time );
00327 return true;
00328 }
00329
00333 VecPosition DynamicObject::getGlobalVelocity( ) const
00334 {
00335 return vecGlobalVelocity;
00336 }
00337
00341 double DynamicObject::getSpeed( ) const
00342 {
00343 return vecGlobalVelocity.getMagnitude();
00344 }
00345
00350 bool DynamicObject::setTimeGlobalVelocity( Time time )
00351 {
00352 timeGlobalVelocity = time;
00353 return true;
00354 }
00355
00359 Time DynamicObject::getTimeGlobalVelocity() const
00360 {
00361 return timeGlobalVelocity;
00362 }
00363
00369 bool DynamicObject::setRelativeDistanceChange( double d, Time time )
00370 {
00371 dRelativeDistanceChange = d;
00372 setTimeChangeInformation( time );
00373 return true;
00374 }
00375
00382 double DynamicObject::getRelativeDistanceChange() const
00383 {
00384 return dRelativeDistanceChange;
00385 }
00386
00392 bool DynamicObject::setRelativeAngleChange( double d, Time time )
00393 {
00394 dRelativeAngleChange = d;
00395 setTimeChangeInformation( time );
00396 return true;
00397 }
00398
00403 double DynamicObject::getRelativeAngleChange() const
00404 {
00405 return dRelativeAngleChange;
00406 }
00407
00411 bool DynamicObject::setTimeChangeInformation( Time time )
00412 {
00413 timeChangeInformation = time ;
00414 return true;
00415 }
00416
00420 Time DynamicObject::getTimeChangeInformation() const
00421 {
00422 return timeChangeInformation;
00423 }
00424
00425
00426
00427
00428
00429
00432 PlayerObject::PlayerObject( ):DynamicObject( )
00433 {
00434 angGlobalBodyAngle = UnknownAngleValue;
00435 angGlobalNeckAngle = UnknownAngleValue;
00436 isKnownPlayer = false;
00437 isGoalie = false;
00438
00439 angRelativeBodyAngle = UnknownAngleValue;
00440 angRelativeNeckAngle = UnknownAngleValue;
00441 }
00442
00448 bool PlayerObject::setRelativeBodyAngle( AngDeg ang, Time time )
00449 {
00450 angRelativeBodyAngle = ang;
00451 setTimeRelativeAngles( time );
00452 return true;
00453 }
00454
00458 AngDeg PlayerObject::getRelativeBodyAngle( ) const
00459 {
00460 return angRelativeBodyAngle;
00461 }
00462
00468 bool PlayerObject::setGlobalBodyAngle( AngDeg ang, Time time)
00469 {
00470 angGlobalBodyAngle = ang;
00471 setTimeGlobalAngles( time );
00472 return true;
00473 }
00474
00478 AngDeg PlayerObject::getGlobalBodyAngle( ) const
00479 {
00480 return angGlobalBodyAngle;
00481 }
00482
00488 bool PlayerObject::setRelativeNeckAngle( AngDeg ang, Time time )
00489 {
00490 angRelativeNeckAngle = ang;
00491 setTimeRelativeAngles( time );
00492 return true;
00493 }
00494
00498 AngDeg PlayerObject::getRelativeNeckAngle( ) const
00499 {
00500 return angRelativeNeckAngle;
00501 }
00502
00508 bool PlayerObject::setGlobalNeckAngle( AngDeg ang, Time time )
00509 {
00510 angGlobalNeckAngle = ang;
00511 setTimeGlobalAngles( time );
00512 return true;
00513 }
00514
00518 AngDeg PlayerObject::getGlobalNeckAngle( ) const
00519 {
00520 return angGlobalNeckAngle;
00521 }
00522
00526 bool PlayerObject::setTimeRelativeAngles( Time time )
00527 {
00528 timeRelativeAngles = time;
00529 return true;
00530 }
00531
00535 Time PlayerObject::getTimeRelativeAngles( ) const
00536 {
00537 return timeRelativeAngles ;
00538 }
00539
00543 bool PlayerObject::setTimeGlobalAngles( Time time )
00544 {
00545 timeGlobalAngles = time;
00546 return true;
00547 }
00548
00552 Time PlayerObject::getTimeGlobalAngles( ) const
00553 {
00554 return timeGlobalAngles ;
00555 }
00556
00563 bool PlayerObject::setIsKnownPlayer( bool b )
00564 {
00565 isKnownPlayer = b;
00566 return true;
00567 }
00568
00574 bool PlayerObject::getIsKnownPlayer() const
00575 {
00576 return isKnownPlayer;
00577 }
00578
00582 bool PlayerObject::setIsGoalie( bool b )
00583 {
00584 isGoalie = b;
00585 return true;
00586 }
00587
00590 bool PlayerObject::getIsGoalie() const
00591 {
00592 return isGoalie;
00593 }
00594
00595
00599 void PlayerObject::show( ostream & os )
00600 {
00601 show( DEFAULT_TEAM_NAME, os );
00602 }
00603
00608 void PlayerObject::show( const char* strTeamName , ostream & os )
00609 {
00610 char buf[MAX_TEAM_NAME_LENGTH];
00611 SoccerTypes::getObjectStr( buf, objectType, strTeamName );
00612 os << buf << "(rel(" << posRelative
00613 << ", " << timeRelativePosition
00614 << ") (global(" << posGlobal
00615 << ", " << timeGlobalPosition
00616 << ")(vel(" << vecGlobalVelocity
00617 << ", " << timeGlobalVelocity
00618 << "(ang(b:" << getGlobalBodyAngle()
00619 << ", n:" << angGlobalNeckAngle
00620 << ", " << timeGlobalAngles
00621 << ")(lastseen:" << timeLastSeen
00622 << ", globalposderived: " << timeGlobalPosDerivedFromSee << endl;
00623 }
00624
00625
00626
00627
00628
00631 BallObject::BallObject():DynamicObject()
00632 {
00633
00634 }
00635
00638 void BallObject::show( ostream& os)
00639 {
00640 char buf[MAX_TEAM_NAME_LENGTH];
00641 SoccerTypes::getObjectStr( buf, objectType, DEFAULT_TEAM_NAME );
00642 os << buf
00643 << " rel(" << posRelative
00644 << ",r: " << posRelative.getMagnitude()
00645 << ", phi: " << posRelative.getDirection()
00646 << ", " << timeRelativePosition
00647 << ") global(" << posGlobal
00648 << ", " << timeGlobalPosition
00649 << "), vel(" << vecGlobalVelocity
00650 << ", " << timeGlobalVelocity
00651 << "), changes(" << dRelativeDistanceChange
00652 << ", " << dRelativeAngleChange
00653 << ") last seen:" << timeLastSeen
00654 << " globalposderived: " << timeGlobalPosDerivedFromSee << endl;
00655 }
00656
00657
00658
00659
00660
00665 AgentObject::AgentObject( double dStaminaMax ):PlayerObject( )
00666 {
00667 viewAngle = VA_ILLEGAL;
00668 viewQuality = VQ_ILLEGAL;
00669
00670 stamina.setStamina ( dStaminaMax );
00671 stamina.setEffort ( 1.0 );
00672 stamina.setRecovery( 1.0 );
00673 velSpeedRelToNeck.setVecPosition( 0.0, 0.0 );
00674
00675 angGlobalNeckAngle = UnknownAngleValue;
00676 angBodyAngleRelToNeck = UnknownAngleValue;
00677 }
00678
00682 void AgentObject::show( ostream& os )
00683 {
00684 show( DEFAULT_TEAM_NAME, os );
00685 }
00686
00691 void AgentObject::show( const char * strTeamName, ostream & os )
00692 {
00693 char buf[MAX_TEAM_NAME_LENGTH];
00694 SoccerTypes::getObjectStr( buf, objectType, strTeamName );
00695 os << buf
00696 << " (global(" << posGlobal
00697 << ", " << timeGlobalPosition
00698 << ") (vel(" << vecGlobalVelocity
00699 << ", " << timeGlobalVelocity
00700 << ") (angles(n:" << angGlobalNeckAngle
00701 << ", b:" << angBodyAngleRelToNeck << ") ";
00702 stamina.show( os );
00703 }
00704
00708 ViewAngleT AgentObject::getViewAngle() const
00709 {
00710 return viewAngle;
00711 }
00712
00718 VecPosition AgentObject::getPositionDifference() const
00719 {
00720 return posPositionDifference;
00721 }
00722
00728 bool AgentObject::setPositionDifference( VecPosition p )
00729 {
00730 posPositionDifference = p;
00731 return true;
00732 }
00733
00737 bool AgentObject::setViewAngle( ViewAngleT v )
00738 {
00739 viewAngle = v;
00740 return true;
00741 }
00742
00746 ViewQualityT AgentObject::getViewQuality() const
00747 {
00748 return viewQuality;
00749 }
00750
00754 bool AgentObject::setViewQuality( ViewQualityT v )
00755 {
00756 viewQuality = v;
00757 return true;
00758 }
00759
00762 Stamina AgentObject::getStamina( ) const
00763 {
00764 return stamina;
00765 }
00766
00770 bool AgentObject::setStamina( Stamina sta )
00771 {
00772 stamina = sta;
00773 return true ;
00774 }
00775
00780 VecPosition AgentObject::getSpeedRelToNeck( ) const
00781 {
00782 return velSpeedRelToNeck;
00783 }
00784
00789 bool AgentObject::setSpeedRelToNeck( VecPosition v )
00790 {
00791 velSpeedRelToNeck = v;
00792 return true;
00793 }
00794
00798 bool AgentObject::setGlobalNeckAngle( AngDeg ang )
00799 {
00800 angGlobalNeckAngle = ang;
00801 angGlobalBodyAngle = VecPosition::normalizeAngle(getBodyAngleRelToNeck()+ang);
00802 return true ;
00803 }
00804
00810 AngDeg AgentObject::getBodyAngleRelToNeck( ) const
00811 {
00812 return angBodyAngleRelToNeck;
00813 }
00814
00818 bool AgentObject::setBodyAngleRelToNeck( AngDeg ang )
00819 {
00820 angBodyAngleRelToNeck = ang;
00821
00822 return true;
00823 }
00824
00825
00826
00827
00828
00834 Stamina::Stamina( double dSta, double dEff, double dRec )
00835 {
00836 setStamina ( dSta );
00837 setEffort ( dEff );
00838 setRecovery( dRec );
00839 }
00840
00844 void Stamina::show( ostream & os)
00845 {
00846 os << "(sta:" << m_dStamina
00847 << ", eff:" << m_dEffort
00848 << ", rec: " << m_dRecovery << ")" << endl;
00849 }
00850
00853 double Stamina::getStamina() const
00854 {
00855 return m_dStamina;
00856 }
00857
00862 bool Stamina::setStamina( double d )
00863 {
00864 if( d < 0.0 )
00865 {
00866 m_dStamina = 0.0;
00867 return false;
00868 }
00869 else
00870 m_dStamina = d;
00871 return true;
00872 }
00873
00880 double Stamina::getEffort() const
00881 {
00882 return m_dEffort;
00883 }
00884
00890 bool Stamina::setEffort( double d )
00891 {
00892 if( d < 0.0 )
00893 {
00894 m_dEffort = 0.0;
00895 return false;
00896 }
00897 else if( d > 1.0 )
00898 {
00899 m_dEffort = 1.0;
00900 return false;
00901 }
00902 else
00903 m_dEffort = d;
00904 return true;
00905 }
00906
00913 double Stamina::getRecovery() const
00914 {
00915 return m_dRecovery;
00916 }
00917
00923 bool Stamina::setRecovery( double d )
00924 {
00925 if( d < 0.0 )
00926 {
00927 m_dRecovery = 0.0;
00928 return false;
00929 }
00930 else if( d > 1.0 )
00931 {
00932 m_dRecovery = 1.0;
00933 return false;
00934 }
00935 else
00936 m_dRecovery = d;
00937 return true;
00938 }
00939
00940
00941
00942
00943
00944
00945
00946
00947
00948
00949
00950
00951
00952
00953
00954
00955
00956
00957