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 ) const;
00064
00065 public:
00071 CPolygon(double cx = 0,double cy = 0);
00072
00075 void AddVertex(double x,double y);
00076
00080 double GetVertex_x(size_t i) const { ASSERT_(i<vx.size()); return vx[i]; }
00081 double GetVertex_y(size_t i) const { ASSERT_(i<vy.size()); return vy[i]; }
00082
00085 size_t verticesCount() { return vx.size(); }
00086
00089 void setAllVertices( const std::vector<double> &x, const std::vector<double> &y );
00090
00093 void setAllVertices( size_t nVertices, const double *xs, const double *ys );
00094
00097 void setAllVertices( size_t nVertices, const float *xs, const float *ys );
00098
00101 void Clear() { vx.clear(); vy.clear(); }
00102
00105 bool PointIntoPolygon(double x,double y) const;
00106
00110 double ComputeTangentAngNearPoint(double x,double y,double view_phi, double min_dist);
00111 };
00112
00113
00114 }
00115 }
00116 #endif