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