| | |
| | | GM_Containment |
| | | } relation_t; |
| | | |
| | | typedef struct PointF_ { |
| | | typedef struct { |
| | | double X; |
| | | double Y; |
| | | } PointF; |
| | | |
| | | typedef struct Line_ { |
| | | /*typedef struct { |
| | | double X1; |
| | | double Y1; |
| | | double X2; |
| | | double Y2; |
| | | } Line;*/ |
| | | |
| | | typedef struct { |
| | | PointF p1; |
| | | PointF p2; |
| | | } Line; |
| | | |
| | | typedef struct Polygon_ { |
| | | int num; |
| | | PointF *point; |
| | | typedef struct { |
| | | int num = 0; |
| | | PointF *point = nullptr; |
| | | } Polygon; |
| | | |
| | | typedef struct Circle_ { |
| | | typedef struct { |
| | | PointF centre; |
| | | double radius; |
| | | } Circle; |
| | | |
| | | #define MAKE_LINE(a, b, c) { (a).X1=b.X; (a).Y1=b.Y; (a).X2=c.X; (a).Y2=c.Y; } |
| | | //#define MAKE_LINE(a, b, c) { a.X1=b.X; a.Y1=b.Y; a.X2=c.X; a.Y2=c.Y; } |
| | | void MAKE_LINE(Line &a, PointF &b, PointF &c); |
| | | |
| | | double toRadians(double degree); |
| | | double toDegree(double radians); |
| | | bool isEqual(double a, double b); |
| | | bool isEqual2(double a, double b); |
| | | double toRadians(double degree); |
| | | double toDegree(double radians); |
| | | bool isEqual(double a, double b); |
| | | bool isEqual2(double a, double b); |
| | | |
| | | void MakeLine(Line *line, const PointF *p1, const PointF *p2); |
| | | void MakePolygon(Polygon *polygon, std::initializer_list<PointF> point_set); |
| | | class MakePolygon { |
| | | public: |
| | | MakePolygon(std::initializer_list<PointF> points) { |
| | | polygon.num = 0; |
| | | if (points.size() > 0) { |
| | | polygon.point = new PointF[points.size()]; |
| | | int n = 0; |
| | | for (auto ptr: points) { |
| | | polygon.point[n++] = ptr; |
| | | } |
| | | polygon.num = n; |
| | | } |
| | | } |
| | | MakePolygon(int pre_num) { |
| | | polygon.num = 0; |
| | | polygon.point = new PointF[pre_num]; |
| | | } |
| | | |
| | | ~MakePolygon() { |
| | | if (polygon.point != nullptr) { |
| | | delete []polygon.point; |
| | | } |
| | | } |
| | | |
| | | void AddPoints(std::initializer_list<PointF> points) { |
| | | if (polygon.point != nullptr) { |
| | | delete []polygon.point; |
| | | } |
| | | polygon.num = 0; |
| | | if (points.size() > 0) { |
| | | int n = 0; |
| | | polygon.point = new PointF[points.size()]; |
| | | for (auto p: points) { |
| | | polygon.point[n++] = p; |
| | | } |
| | | polygon.num = n; |
| | | } |
| | | } |
| | | |
| | | void AddPoint(PointF &point) { |
| | | polygon.point[polygon.num] = point; |
| | | polygon.num++; |
| | | } |
| | | |
| | | Polygon *GetPolygon(void) { |
| | | return &polygon; |
| | | } |
| | | |
| | | private: |
| | | Polygon polygon; |
| | | }; |
| | | |
| | | //void MakePolygon(Polygon *polygon, std::initializer_list<PointF> point_set); |
| | | void CleanPolygon(Polygon *polygon); |
| | | void MakeHidePoint(PointF *point, const PointF *bp, const Line *bl); |
| | | |
| | |
| | | PointF GetVerticalPoint(PointF p1, PointF p2, PointF p3); |
| | | bool VerticalPointOnLine(PointF point, Line line); |
| | | bool VerticalPointOnLine(PointF point, Line line, PointF &vp); |
| | | PointF Calc3Point(PointF p1, PointF p2, double L, char dir); |
| | | PointF Calc3Point(PointF p1, PointF p2, double length, char dir); |
| | | PointF PointExtend(PointF ori, double length, double yaw); |
| | | bool IsSamePoint(PointF p1, PointF p2); |
| | | double AvgYaw(std::vector<double> &angles); |