00001 /** 00002 * @file ObstaclesPercept.cpp 00003 * 00004 * Implementation of class ObstaclesPercept. 00005 * @author <a href="mailto:juengel@informatik.hu-berlin.de">Matthias Juengel</a> 00006 */ 00007 00008 #include "ObstaclesPercept.h" 00009 00010 void ObstaclesPercept::reset(unsigned long frameNumber) 00011 { 00012 this->frameNumber = frameNumber; 00013 numberOfPoints = 0; 00014 00015 for(int i = 0; i < 2; i++) 00016 { 00017 angleToFreePartOfGoalWasDetermined[i] = false; 00018 angleToFreePartOfGoal[i] = distanceToFreePartOfGoal[i] = 00019 widthOfFreePartOfGoal[i] = 0; 00020 } 00021 } 00022 00023 void ObstaclesPercept::add(const Vector2<int>& nearPoint, const Vector2<int>& farPoint, bool farPointIsOnBorder) 00024 { 00025 if(numberOfPoints < maxNumberOfPoints) 00026 { 00027 nearPoints[numberOfPoints] = nearPoint; 00028 farPoints[numberOfPoints] = farPoint; 00029 farPointIsOnImageBorder[numberOfPoints++] = farPointIsOnBorder; 00030 } 00031 } 00032 00033 void ObstaclesPercept::add(const Vector2<int>& nearPoint, const Vector2<int>& farPoint, bool farPointIsOnBorder, ObstacleType obstacleType) 00034 { 00035 if(numberOfPoints < maxNumberOfPoints) 00036 { 00037 nearPoints[numberOfPoints] = nearPoint; 00038 farPoints[numberOfPoints] = farPoint; 00039 farPointIsOnImageBorder[numberOfPoints] = farPointIsOnBorder; 00040 this->obstacleType[numberOfPoints++] = obstacleType; 00041 } 00042 } 00043 00044 00045 In& operator>>(In& stream, ObstaclesPercept& obstaclesPercept) 00046 { 00047 stream >> obstaclesPercept.frameNumber; 00048 char temp; 00049 00050 for(int i = 0; i < 2; i++) 00051 { 00052 stream >> temp; 00053 obstaclesPercept.angleToFreePartOfGoalWasDetermined[i] = temp != 0; 00054 if(temp) 00055 stream >> obstaclesPercept.angleToFreePartOfGoal[i] 00056 >> obstaclesPercept.distanceToFreePartOfGoal[i] 00057 >> obstaclesPercept.widthOfFreePartOfGoal[i]; 00058 } 00059 00060 stream >> obstaclesPercept.numberOfPoints; 00061 for(int j = 0; j < obstaclesPercept.numberOfPoints; j++) 00062 { 00063 stream >> obstaclesPercept.nearPoints[j].x >> obstaclesPercept.nearPoints[j].y; 00064 stream >> obstaclesPercept.farPoints[j].x >> obstaclesPercept.farPoints[j].y; 00065 stream >> temp; 00066 obstaclesPercept.obstacleType[j] = (ObstaclesPercept::ObstacleType)temp; 00067 stream >> temp; 00068 obstaclesPercept.farPointIsOnImageBorder[j] = temp != 0; 00069 } 00070 return stream; 00071 } 00072 00073 Out& operator<<(Out& stream, const ObstaclesPercept& obstaclesPercept) 00074 { 00075 stream << obstaclesPercept.frameNumber; 00076 for(int i = 0; i < 2; i++) 00077 { 00078 if(obstaclesPercept.angleToFreePartOfGoalWasDetermined[i]) 00079 stream << char(1) << obstaclesPercept.angleToFreePartOfGoal[i] 00080 << obstaclesPercept.distanceToFreePartOfGoal[i] 00081 << obstaclesPercept.widthOfFreePartOfGoal[i]; 00082 else 00083 stream << char(0); 00084 } 00085 00086 stream << obstaclesPercept.numberOfPoints; 00087 for(int j = 0; j < obstaclesPercept.numberOfPoints; j++) 00088 { 00089 stream << obstaclesPercept.nearPoints[j].x << obstaclesPercept.nearPoints[j].y; 00090 stream << obstaclesPercept.farPoints[j].x << obstaclesPercept.farPoints[j].y; 00091 stream << (char)(obstaclesPercept.obstacleType[j]); 00092 if(obstaclesPercept.farPointIsOnImageBorder[j]) stream << char(1); 00093 else stream << char(0); 00094 } 00095 return stream; 00096 } 00097 00098 /* 00099 * Change log : 00100 * 00101 * $Log: ObstaclesPercept.cpp,v $ 00102 * Revision 1.1.1.1 2004/05/22 17:25:59 cvsadm 00103 * created new repository GT2004_WM 00104 * 00105 * Revision 1.4 2004/03/01 11:49:05 juengel 00106 * Added obstacle type as parameter for add method and to streaming operators. 00107 * 00108 * Revision 1.3 2004/01/19 14:53:46 dueffert 00109 * all frameNumbers (and not only some of them) are unsigned long now 00110 * 00111 * Revision 1.2 2003/11/12 16:19:35 goehring 00112 * frameNumber added to percepts 00113 * 00114 * Revision 1.1 2003/10/07 10:09:36 cvsadm 00115 * Created GT2004 (M.J.) 00116 * 00117 * Revision 1.1.1.1 2003/07/02 09:40:22 cvsadm 00118 * created new repository for the competitions in Padova from the 00119 * tamara CVS (Tuesday 2:00 pm) 00120 * 00121 * removed unused solutions 00122 * 00123 * Revision 1.3 2003/06/25 18:42:14 juengel 00124 * Added nearPoints, farPoints[maxNumberOfPoints] and farPointIsOnImageBorder to ObstaclesPercept. 00125 * 00126 * Revision 1.2 2003/05/26 08:12:11 juengel 00127 * Moved angleToFreePartOfGoal from specialPercept to obstaclesPercept. 00128 * 00129 * Revision 1.1 2003/03/10 13:52:09 juengel 00130 * Added ObstaclesPercept 00131 * 00132 */