From 4bd08f0355b6b2cf3c027202d5ad301b4e182953 Mon Sep 17 00:00:00 2001 From: yy1717 <fctom1215@outlook.com> Date: 星期五, 31 三月 2023 17:16:22 +0800 Subject: [PATCH] 科目二修改 --- lib/src/main/cpp/test_common/Geometry.h | 38 +++++++++++++++++++++++++++++--------- 1 files changed, 29 insertions(+), 9 deletions(-) diff --git a/lib/src/main/cpp/test_common/Geometry.h b/lib/src/main/cpp/test_common/Geometry.h index 276fccd..08947b9 100644 --- a/lib/src/main/cpp/test_common/Geometry.h +++ b/lib/src/main/cpp/test_common/Geometry.h @@ -9,13 +9,13 @@ #include <initializer_list> #include <vector> -enum Relation +typedef enum { GM_None, GM_Tangent, GM_Intersection, GM_Containment -}; +} relation_t; typedef struct PointF_ { double X; @@ -34,6 +34,13 @@ PointF *point; } Polygon; +typedef struct Circle_ { + 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; } + double toRadians(double degree); double toDegree(double radians); bool isEqual(double a, double b); @@ -44,14 +51,17 @@ 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); +relation_t IntersectionOf(const Polygon *polygon1, const Polygon *polygon2); +relation_t IntersectionOf(Line line, const Polygon *polygon); +relation_t IntersectionOf(PointF point, const Polygon *polygon); +relation_t IntersectionOf(PointF point, Line line); +relation_t IntersectionOf(Line line1, Line line2); double DistanceOf(PointF point1, PointF point2); double DistanceOf(PointF point, Line line); double YawOf(PointF p1, PointF p2); +double YawOf(Line &line); +double AngleOf(PointF p1, PointF p2, PointF p3); +double AngleOfTowLine(Line base, Line dest); double DeltaYaw(double yaw1, double yaw2); double CalculateAngle(Line base, Line dest); PointF rotatePoint(PointF oldPoint, PointF centre, double degree); @@ -59,8 +69,17 @@ 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); + +typedef enum { + REL_POS_ON, + REL_POS_LEFT, + REL_POS_RIGHT, + REL_POS_FRONT, + REL_POS_REAR +} relational_position_t; + +relational_position_t IntersectionOfLine(PointF p1, PointF p2, PointF p3); +relational_position_t 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); @@ -68,5 +87,6 @@ PointF PointExtend(PointF ori, double length, double yaw); bool IsSamePoint(PointF p1, PointF p2); double AvgYaw(std::vector<double> &angles); +bool Calc3PointCircle(PointF p1, PointF p2, PointF p3, Circle &circle); #endif //GUI_GEOMETRY_H -- Gitblit v1.8.0