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

1 month ago
#pragma once
//<2F><><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD>
#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);
//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>(x1,y1)-(x2,y2) ,(x3,y3)-(x4,y4)<29>Ƿ<EFBFBD><C7B7>
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);
//<2F><><EFBFBD><EFBFBD>ֱ<EFBFBD>ߵĽ<DFB5><C4BD><EFBFBD>,k1,k2Ϊ<32><CEAA><EFBFBD><EFBFBD>ֱ<EFBFBD>ߵ<EFBFBD>б<EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD>kֵ > 1e10 <20><>ʾ<EFBFBD><CABE>ֱ<EFBFBD><D6B1>x<EFBFBD><78> <20><><EFBFBD><EFBFBD>0<EFBFBD><30>ʾ<EFBFBD>޽<EFBFBD><DEBD><EFBFBD><E3A3AC><EFBFBD><EFBFBD>1<EFBFBD><31>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>Ψһ<CEA8><D2BB><EFBFBD><EFBFBD><E3A3AC><EFBFBD><EFBFBD>2<EFBFBD><32>ʾ<EFBFBD><CABE>ֱ<EFBFBD><D6B1><EFBFBD>غ<EFBFBD>
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);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A(x1,y1),B(x2,y2)<29>IJ<EFBFBD><C4B2><EFBFBD>(<28><><EFBFBD><EFBFBD>)
static double CrossProduct(double x1, double y1, double x2, double y2);
// <20><>ά<EFBFBD><CEAC><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
static double CrossProduct(double x1, double y1, double x2, double y2, double ptX, double ptY);
//<2F><><EFBFBD>Ƿ<EFBFBD><C7B7>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD>
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);
//<2F><>ȡ<EFBFBD>Ƕ<EFBFBD> -pi/2 ~pi/2
static double GetAngle180(double x1, double y1, double x2, double y2);
//<2F><>ȡ<EFBFBD>Ƕ<EFBFBD> -pi ~ pi
static double GetAngle360(double x1, double y1, double x2, double y2);
//x0,y0 <20>ԣ<EFBFBD>xs,ys<79><73>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>תradian<61><6E><EFBFBD><EFBFBD>
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<><30>ʱ<EFBFBD>룬1 ˳ʱ<CBB3><CAB1>
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);
};