You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kev/Drawer/GVision/BaseLib/PublicFunctions.h

55 lines
2.7 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#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);
};