yy1717
2024-02-28 27fc91fbe8f88b6885356e68828cfe1ce1db7601
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);