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 CPOLYGON_H
00029 #define CPOLYGON_H
00030
00031 #include <mrpt/utils/utils_defs.h>
00032 #include <mrpt/utils/CSerializable.h>
00033
00034 namespace mrpt
00035 {
00036 namespace math
00037 {
00038
00039 DEFINE_SERIALIZABLE_PRE( CPolygon )
00040
00041
00043 class MRPTDLLIMPEXP CPolygon : public mrpt::utils::CSerializable
00044 {
00045
00046 DEFINE_SERIALIZABLE( CPolygon )
00047
00048 private:
00051 std::vector<double> vx,vy;
00052
00055 double cx,cy;
00056
00059 double min_x,max_x,min_y,max_y;
00060
00061
00062
00063 bool isLeft( double P0x,double P0y,double P1x,double P1y,double Px,double Py );
00064
00065 public:
00068 CPolygon(double cx = 0,double cy = 0);
00069
00072 void AddVertex(double x,double y);
00073
00076 double GetVertex_x(size_t i) { return vx[i]; }
00077 double GetVertex_y(size_t i) { return vy[i]; }
00078
00081 size_t verticesCount() { return vx.size(); }
00082
00085 void setAllVertices( size_t nVertices, const double *xs, const double *ys );
00086
00089 void setAllVertices( size_t nVertices, const float *xs, const float *ys );
00090
00093 void Clear() { vx.clear(); vy.clear(); }
00094
00097 bool PointIntoPolygon(double x,double y);
00098
00102 double ComputeTangentAngNearPoint(double x,double y,double view_phi, double min_dist);
00103 };
00104
00105
00106 }
00107 }
00108 #endif