From 27fc91fbe8f88b6885356e68828cfe1ce1db7601 Mon Sep 17 00:00:00 2001
From: yy1717 <fctom1215@outlook.com>
Date: 星期三, 28 二月 2024 09:53:13 +0800
Subject: [PATCH] 坐标
---
lib/src/main/cpp/test_common/Geometry.h | 85 +++++++++++++++++++++++++++++++++++-------
1 files changed, 71 insertions(+), 14 deletions(-)
diff --git a/lib/src/main/cpp/test_common/Geometry.h b/lib/src/main/cpp/test_common/Geometry.h
index 08947b9..f2cf553 100644
--- a/lib/src/main/cpp/test_common/Geometry.h
+++ b/lib/src/main/cpp/test_common/Geometry.h
@@ -17,37 +17,94 @@
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);
@@ -83,7 +140,7 @@
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);
--
Gitblit v1.8.0