// // Created by YY on 2019/4/30. // #ifndef GUI_GEOMETRY_H #define GUI_GEOMETRY_H #include #include enum Relation { GM_None, GM_Tangent, GM_Intersection, GM_Containment }; typedef struct PointF_ { double X; double Y; } PointF; typedef struct Line_ { double X1; double Y1; double X2; double Y2; } Line; typedef struct Polygon_ { int num; PointF *point; } Polygon; inline double toRadians(double degree); inline double toDegree(double radians); inline bool isEqual(double a, double b); inline bool isEqual2(double a, double b); double round(double number, unsigned int bits); void MakeLine(Line *line, const PointF *p1, const PointF *p2); void MakePolygon(Polygon *polygon, std::initializer_list point_set); void CleanPolygon(Polygon *polygon); void MakeHidePoint(PointF *point, const PointF *bp, const Line *bl); Relation IntersectionOf(const Polygon *polygon1, const Polygon *polygon2); Relation IntersectionOf(Line line, const Polygon *polygon); Relation IntersectionOf(PointF point, const Polygon *polygon); Relation IntersectionOf(PointF point, Line line); Relation IntersectionOf(Line line1, Line line2); double DistanceOf(PointF point1, PointF point2); double DistanceOf(PointF point, Line line); double YawOf(PointF p1, PointF p2); double CalculateAngle(Line base, Line dest); PointF rotatePoint(PointF oldPoint, PointF centre, double degree); bool InsidePolygon(const Polygon *t1, const Polygon *t2); bool PartInsidePolygon(const Polygon *t1, const Polygon *t2); bool OutsidePolygon(const Polygon *t1, const Polygon *t2); int IntersectionOfLine(PointF p1, PointF p2, PointF p3); int IntersectionOfLine(PointF p, Line line); 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 PointExtend(PointF ori, double length, double yaw); #endif //GUI_GEOMETRY_H