//
|
// Created by YY on 2019/4/30.
|
//
|
|
#ifndef GUI_GEOMETRY_H
|
#define GUI_GEOMETRY_H
|
|
#include <stdint.h>
|
#include <initializer_list>
|
#include <vector>
|
|
typedef enum
|
{
|
GM_None,
|
GM_Tangent,
|
GM_Intersection,
|
GM_Containment
|
} relation_t;
|
|
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;
|
|
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);
|
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);
|
void CleanPolygon(Polygon *polygon);
|
void MakeHidePoint(PointF *point, const PointF *bp, const Line *bl);
|
|
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);
|
PointF centerOfTwoPoint(PointF p1, PointF p2);
|
bool InsidePolygon(const Polygon *t1, const Polygon *t2);
|
bool PartInsidePolygon(const Polygon *t1, const Polygon *t2);
|
bool OutsidePolygon(const Polygon *t1, const Polygon *t2);
|
|
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);
|
PointF Calc3Point(PointF p1, PointF p2, double L, char dir);
|
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
|