|
|
#pragma once
|
|
|
//公用函数库
|
|
|
#include <vector>
|
|
|
#include <list>
|
|
|
#include <string>
|
|
|
#include <fstream>
|
|
|
//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<double>& x);
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|