#pragma once //公用函数库 #include #include #include #include //using namespace std; #ifndef PI #define PI 3.1415926535897932384626433832795028841971 #endif class AFX_EXT_CLASS CPublicFunctions { public: CPublicFunctions(); virtual ~CPublicFunctions(); static double Area(int num, double* x, double* y); //判断两条线段(x1,y1)-(x2,y2) ,(x3,y3)-(x4,y4)是否相交 static int IsSegmentCross(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4); static int LineCrossPoint(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4, double& x0, double& y0); //两条直线的交点,k1,k2为两条直线的斜率,若k值 > 1e10 表示垂直于x轴 返回0表示无交点,返回1表示存在唯一交点,返回2表示两直线重合 static int LineCrossPoint(double x1, double y1, double k1, double x2, double y2, double k2, double& x0, double& y0); static bool IsEqual(double x, double y, double esp = 1e-8); //两向量A(x1,y1),B(x2,y2)的叉积(外积) static double CrossProduct(double x1, double y1, double x2, double y2); // 二维向量的叉积 static double CrossProduct(double x1, double y1, double x2, double y2, double ptX, double ptY); //点是否在多边形内部 static int IsInsidePolygon(double x0, double y0, double* x, double* y, int m); static void GetGravityCenter(double* xx, double* yy, int num, double& x0, double& y0); static double GetAreaTrue(int num, double* x, double* y); static double LinearInterpolate(double x1, double y1, double x2, double y2, double x0); static void Trim(std::string& line); //trim left and right spaces static double Distance(double x1, double y1, double x2, double y2); //获取角度 -pi/2 ~pi/2 static double GetAngle180(double x1, double y1, double x2, double y2); //获取角度 -pi ~ pi static double GetAngle360(double x1, double y1, double x2, double y2); //x0,y0 以(xs,ys)为中心旋转radian弧度 static void Rotate(double& x0, double& y0, double xs, double ys, double radian); static void Rotate(double& x0, double& y0, double xs, double ys, double cosa,double sina); static void Rotate(double &x0, double &y0, double radians, int directionFlag = 0); static void Rotate(double &x, double &y, double cosa, double sina, int directionFlag=0); // directionFlag,0逆时针,1 顺时针 static bool IsPointOnsegment(double x0, double y0, double x1, double y1, double x2, double y2); static int PointInLine(double x0, double y0, double x1, double y1, double x2, double y2); static double PointLineDistance(double x0, double y0, double k, double b); static double GetAngle(double x1, double y1, double x2, double y2, double x3, double y3, int directionFlag = 0); static int BinarySearch(double key, std::vector& x); };