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 #ifndef PF_aux_structs_H
00029 #define PF_aux_structs_H
00030
00031 #include <mrpt/utils/utils_defs.h>
00032 #include <vector>
00033 #include <iostream>
00034 #include <iterator>
00035
00036 #include <mrpt/slam/link_pragmas.h>
00037
00038 namespace mrpt
00039 {
00040 namespace slam
00041 {
00042 namespace detail
00043 {
00044 using namespace mrpt;
00045 using namespace mrpt::math;
00046 using namespace std;
00047
00048
00049 struct SLAM_IMPEXP TPoseBin2D
00050 {
00051 TPoseBin2D() : x(0),y(0),phi(0) { }
00052
00053 int x,y,phi;
00054
00055
00056 struct SLAM_IMPEXP lt_operator
00057 {
00058 inline bool operator()(const TPoseBin2D& s1, const TPoseBin2D& s2) const
00059 {
00060 if (s1.x < s2.x) return true;
00061 if (s1.x > s2.x) return false;
00062 if (s1.y < s2.y) return true;
00063 if (s1.y > s2.y) return false;
00064 return s1.phi<s2.phi;
00065 }
00066 };
00067 };
00068
00069
00070 struct SLAM_IMPEXP TPathBin2D
00071 {
00072 std::vector<TPoseBin2D> bins;
00073
00074
00075 struct SLAM_IMPEXP lt_operator
00076 {
00077 bool operator()(const TPathBin2D& s1, const TPathBin2D& s2) const
00078 {
00079 ASSERT_(s1.bins.size()==s2.bins.size())
00080 for (size_t i=0;i<s1.bins.size();i++)
00081 {
00082 if (s1.bins[i].x < s2.bins[i].x) return true;
00083 if (s1.bins[i].x > s2.bins[i].x) return false;
00084 if (s1.bins[i].y < s2.bins[i].y) return true;
00085 if (s1.bins[i].y > s2.bins[i].y) return false;
00086 if (s1.bins[i].phi < s2.bins[i].phi) return true;
00087 if (s1.bins[i].phi > s2.bins[i].phi) return false;
00088
00089 }
00090 return false;
00091 }
00092 };
00093 };
00094
00095
00096 struct SLAM_IMPEXP TPoseBin3D
00097 {
00098 TPoseBin3D() : x(0),y(0),z(0),yaw(0),pitch(0),roll(0) { }
00099
00100 int x,y,z,yaw,pitch,roll;
00101
00102
00103 struct SLAM_IMPEXP lt_operator
00104 {
00105 bool operator()(const TPoseBin3D& s1, const TPoseBin3D& s2) const
00106 {
00107 if (s1.x < s2.x) return true;
00108 if (s1.x > s2.x) return false;
00109 if (s1.y < s2.y) return true;
00110 if (s1.y > s2.y) return false;
00111 if (s1.z < s2.z) return true;
00112 if (s1.z > s2.z) return false;
00113 if (s1.yaw < s2.yaw) return true;
00114 if (s1.yaw > s2.yaw) return false;
00115 if (s1.pitch < s2.pitch) return true;
00116 if (s1.pitch > s2.pitch) return false;
00117 return s1.roll<s2.roll;
00118 }
00119 };
00120 };
00121
00122
00123 }
00124 }
00125 }
00126
00127 #endif