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.

698 lines
29 KiB
C

1 month ago
/**************************************************************************************
<EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>BaseFunction.h
<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>Ӻ<EFBFBD><EFBFBD><EFBFBD>
//<2F>ռ<EFBFBD><D5BC><EFBFBD>ռ<EFBFBD><D5BC>߶ε<DFB6><CEB5><EFBFBD><EFBFBD>̾<EFBFBD><CCBE><EFBFBD>
double PointSegmentDistance3D(double x0, double y0, double z0, double x1, double y1,double z1, double x2, double y2, double z2);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A(x1,y1),B(x2,y2)<29>ĵ<EFBFBD><C4B5><EFBFBD>(<28>ڻ<EFBFBD>)
double DotProduct(double x1,double y1,double x2,double y2);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A(x1,y1),B(x2,y2)<29>IJ<EFBFBD><C4B2><EFBFBD>(<28><><EFBFBD><EFBFBD>)
double CrossProduct(double x1, double y1, double x2, double y2);
//<2F><><EFBFBD><EFBFBD><EFBFBD>߱߳<DFB1><DFB3>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD>
double TriArea(double a, double b, double c);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A(x1,y1) B(x2,y2) C(x3,y3)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B<EFBFBD>Ľ<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>AC<41>߽<EFBFBD><DFBD><EFBFBD>(x0,y0)<29><><EFBFBD><EFBFBD>ABC<42><43><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD>Ͼ<EFBFBD><CFBE><EFBFBD>Ϊ1<CEAA><31><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
bool GetAngularBisector(double x1, double y1, double x2, double y2, double x3, double y3, double& x0, double& y0);
//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>(x1,y1)-(x2,y2) ,(x3,y3)-(x4,y4)<29>Ƿ<EFBFBD><C7B7>ཻ,<2C><><EFBFBD><EFBFBD>1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0BDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0 <20><><EFBFBD><EFBFBD><E0BDBB> <20><><EFBFBD><EFBFBD>2 <20><><EFBFBD><EFBFBD><EFBFBD>
int IsSegmentCross(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4);
//<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>
int LineCrossPoint(double x1,double y1, double k1, double x2,double y2, double k2, double& x0, double& y0 );
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD> --- wangcw
bool Smooth53(double* val, int n, int stimes = 100);
//<2F><>ɢ<EFBFBD><C9A2><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EAB1A3><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>x<EFBFBD><78>y<EFBFBD><79>
int GetOutline(int num, double *x, double *y);
// <20>õ<EFBFBD>ɢ<EFBFBD><C9A2><EFBFBD><EFBFBD>͹<EFBFBD><CDB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭʼ<D4AD>㼯p<E3BCAF><70>СΪn<CEAA><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵΪ͹<CEAA><CDB9><EFBFBD><EFBFBD>С<><CDB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>convex<65><78>
int GetConvexHull(int n, CPoint2D* s_points,CPoint2D* convex, int maxsize = 1, int dir = 1 );
//x1,y1,x2,y2,x3,y3Ϊ<33><CEAA><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>꣬x,y,r<>з<EFBFBD><D0B7>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Բ<EFBFBD><D4B2>Բ<EFBFBD><D4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BOOL GetCircumcenter(double &x, double &y, double &r,
double x1, double y1,
double x2, double y2,
double x3, double y3);
**************************************************************************************/
#pragma once
#ifndef AFX_EXT_CLASS
#define AFX_EXT_CLASS Q_DECL_IMPORT
#endif
#include "math.h"
#include "Point2D.h"
#include <vector>
//
#ifndef PI
#define PI 3.1415926535897932384626433832795
#endif
#ifndef RHO
#define RHO 57.295779513082320876798154814114 //(180.0/PI)
#endif
#ifdef _QT_VERSION
//
// Code Page Default Values.
//
#define CP_ACP 0 // default to ANSI code page
#define CP_OEMCP 1 // default to OEM code page
#define CP_MACCP 2 // default to MAC code page
#define CP_THREAD_ACP 3 // current thread's ANSI code page
#define CP_SYMBOL 42 // SYMBOL translations
#define CP_UTF7 65000 // UTF-7 translation
#define CP_UTF8 65001 // UTF-8 translation
#endif //_QT_VERSION
namespace GBase
{
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD>
#define CODE_GB2312 0x00000000 //gb2312<31><32><EFBFBD><EFBFBD>
#define CODE_UTF8 0x00000001 //utf-8<><38><EFBFBD><EFBFBD>
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class AFX_EXT_CLASS CBaseFunction
{
public:
CBaseFunction(void);
virtual ~CBaseFunction(void);
//˫<><CBAB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
void FloatToString(CString& result, double dValue);
void FloatToString(CString& result, double dValue, int n);
void FloatToString(char* result, double dValue);
void FloatToString(char *result, double dValue, int n);
CString FloatToString(double dValue); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>m_tempLine<6E>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>GetTempString()<29><><EFBFBD><EFBFBD>
CString FloatToString(double dValue, int n);
CString ToString(double dValue, int n = 6);
CString Bool2Str(bool boolVal);
CString Bool2Str(BOOL boolVal);
long FloatToLong(double value);
////<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>У<EFBFBD><D0A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>ȱʡ<C8B1>ǡ<EFBFBD><C7A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void PrintXYZ(char* string, double *v, int num, int digits, char split = ',');
//void PrintXYZ(CString& result, double *v, int num, int digits, char split=',');
void PrintXYZ(char* result, double *v, int num, char split = ',');
//void PrintXYZ(CString& result, double *v, int num, char split=',');
public:
//<2F><><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD>С<EFBFBD><D0A1>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
void SetDecimalDigits(int digits);
int GetDecimalDigits(void);
int IsDigit(CString &line);
int IsDigit(char* line);
bool IsKey(const CString& key, LPCTSTR lpszKeyString);
bool IsZero(const double& val); //<2F>ж<EFBFBD>val<61>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
bool IsZero(const double& val, double deps); //<2F>ж<EFBFBD>val<61>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
bool IsEqual(const double& x, const double& y, double deps = 1e-8); //<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
bool IsEqual(const CPoint2D& pt1, const CPoint2D& pt2, double deps = 1e-6); //<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>غ<EFBFBD>
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB> λ<><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>plen
int GetTopDigit(int scrV, int* plen);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>滻Ϊ0
int ReplaceDigitWithZero(int scrV);
public:
int GetArgument(CString cmd, CStringList &list);
//<2F><><EFBFBD><EFBFBD><EFBFBD>Թؼ<D4B9><D8BC>֣<EFBFBD><D6A3>ո񡢶<D5B8><F1A1A2B6>š<EFBFBD>TAB<41><42><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2>Ĺؼ<C4B9><D8BC>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int ScanfString(CStringArray &m_type, char* cmd);
//<2F><><EFBFBD><EFBFBD>split<69><74><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>split<69><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int ScanfString1(CStringArray &m_type, char* cmd, int n, char split);
//<2F><><EFBFBD><EFBFBD>split<69><74><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>split<69><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int ScanfString1(CStringArray &m_type, CString cmd, char split);
int ScanfString(CStringArray &m_type, CString cmd, char split, bool bWithQuotation = false);
//<2F><><EFBFBD><EFBFBD>split<69><74><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD>,bWithQuotation==true<75><65>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2>Ĺؼ<C4B9><D8BC>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int ScanfString(CStringArray &m_type,
char* cmd, int nCmdNum,
char* splitChar, int nSplitNum,
bool bWithQuotation = true);
int ScanDouble(char *line, double *x, int n, int m);
int ScanDouble1(char *line, double *x, int n, int m);
//<2F>õ<EFBFBD><C3B5>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> added ww 2015-1-26
int GetFileLineNum(const char* strFile);
public:
//<2F><><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>*x<>е<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>/<2F>ɴ<EFBFBD><C9B4><EFBFBD>С)
int BinarySearch(double key, int num, double *x);
double LineValue(double x0, double *x, double *y);
double LineValue(double x0, double x1, double x2, double y1, double y2);
double LineValue(double m, double n, double z1, double z2, double z3, double z4);
/////< <20><>ӦPline.h<>е<EFBFBD>DflineValue<75><65><EFBFBD><EFBFBD>
//<2F>ȶ<EFBFBD><C8B6>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Բ<EFBFBD>ֵ
//<2F><><EFBFBD><EFBFBD>*x<>е<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>/<2F>ɴ<EFBFBD><C9B4><EFBFBD>С)
double LineValue(double *x, double *y, int num, double x0);
//<2F><><EFBFBD><EFBFBD><5A><D6B5><EFBFBD>Բ<EFBFBD>ֵXY<58><59><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD>true
// <20><><EFBFBD><EFBFBD>*z<>е<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>/<2F>ɴ<EFBFBD><C9B4><EFBFBD>С)
// bExtend<6E><64>1<EFBFBD><31><EFBFBD>ƣ<EFBFBD>bExtend=0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool LineValue(OUT CPoint2D& pt, double *x, double *y, double *z, int num, double z0, BOOL bExtend);
//<2F><><EFBFBD>Բ<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD>true<75><65>
// <20><><EFBFBD><EFBFBD>*y<>е<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>/<2F>ɴ<EFBFBD><C9B4><EFBFBD>С)
// bExtend<6E><64>1<EFBFBD><31><EFBFBD>ƣ<EFBFBD>bExtend=0<><30><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>
// <20><>bExtend=0ʱ<30><CAB1>bSetValue=1<>ڷ<EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ֵ<EFBFBD><D6B5>bSetValue=0<>ڷ<EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD>ֵ
bool LineValue(OUT double &y0, double *x, double *y, int num, double x0, BOOL bExtend, BOOL bSetValue);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת
void Rotate(double &x0, double &y0, double radians);
void Rotate(double &x, double &y, double cosa, double sina);
void Rotate(double &x0, double &y0, double &z0, double alfa, double beta);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E3A3AC><EFBFBD><EFBFBD>mode=0<><30><EFBFBD><EFBFBD>+ <20><><31><CEAA><EFBFBD><EFBFBD><32>ˣ<EFBFBD><33><CEAA>
void Arithmetic(double& val, double factor, int mode);
void SortCoordinate(double* x, double* y, int n); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EAB0B4><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int GetMinValueIndex(double* a, int n); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Сֵ<D0A1><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
double TotalDistance(double *a, double *b, int n); //<2F><><EFBFBD><EFBFBD><EFBFBD>ܵľ<DCB5><C4BE><EFBFBD><EFBFBD><EFBFBD>
double Distance2(double x1, double y1, double x2, double y2);
double Distance(double x1, double y1, double x2, double y2);
double Distance3D(double x1, double y1, double z1, double x2, double y2, double z2);
//<2F><>(x0,y0)<29><>ֱ<EFBFBD><D6B1>kx+b<>ľ<EFBFBD><C4BE><EFBFBD>
double PointLineDistance(double x0, double y0, double k, double b);
// <20><>(x0,y0)<29><><EFBFBD>߶ε<DFB6><CEB5><EFBFBD><EFBFBD>̾<EFBFBD><CCBE><EFBFBD>
double PointLineDistance(double x0, double y0, double x1, double y1, double x2, double y2);
// <20><>(x0,y0)<29><><EFBFBD>߶ε<DFB6><CEB5><EFBFBD><EFBFBD>̾<EFBFBD><CCBE><EFBFBD> a- 0<><30>1 <20>ľ<EFBFBD><C4BE>룬 b 0<><30>2 <20>ľ<EFBFBD><C4BE>룬 c 1<><31>2<EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>
double PointLineDistance(double x0, double y0, double x1, double y1, double x2, double y2, double a, double b, double c);
//<2F>ռ<EFBFBD><D5BC><EFBFBD>(x0,y0,z0)<29><><EFBFBD>ռ<EFBFBD><D5BC>߶ε<DFB6><CEB5><EFBFBD><EFBFBD>̾<EFBFBD><CCBE><EFBFBD> --Wangcw
double PointLineDistance3D(double x0, double y0, double z0, double x1, double y1, double z1, double x2, double y2, double z2);
///////////////////////////////////////////////////////////////////////
//
// 1 <20>ϲ<EFBFBD>
// p1--------------------p2
// 2 <20>²<EFBFBD>
//
//
// p2
// |
// |
// 1 <20><><EFBFBD><EFBFBD> | 2 <20>Ҳ<EFBFBD>
// |
// |
// p1
//
// <20>жϵ<D0B6><CFB5><EFBFBD>ֱ<EFBFBD>ߵ<EFBFBD><DFB5>IJ<EFBFBD> 1-- <20><><EFBFBD><EFBFBD> 0--<2D><><EFBFBD><EFBFBD> 2---<2D>Ҳ<EFBFBD>
int PointInLine(double x0, double y0, double x1, double y1, double x2, double y2);
//<2F>жϵ<D0B6><CFB5>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>߶<EFBFBD><DFB6><EFBFBD>
bool IsPointOnSegment(double x0, double y0, double x1, double y1, double x2, double y2);
//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>(x1,y1)-(x2,y2) ,(x3,y3)-(x4,y4)<29>Ƿ<EFBFBD><C7B7>ཻ,<2C><><EFBFBD><EFBFBD>1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0BDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0 <20><><EFBFBD><EFBFBD><E0BDBB> <20><><EFBFBD><EFBFBD>2 <20><><EFBFBD><EFBFBD><EFBFBD>
int IsSegmentCross(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4);
//<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>
int LineCrossPoint(double x1, double y1, double k1, double x2, double y2, double k2, double& x0, double& y0);
int LineCrossPoint(const CPoint2D& pt1, const CPoint2D& pt2, const CPoint2D& pt3, const CPoint2D& pt4, double& x0, double& y0);
//<2F>жϵ<D0B6><CFB5>Ƿ<EFBFBD><C7B7>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><31>ڲ<EFBFBD><30>ⲿ<EFBFBD><E2B2BF> x,yΪ<79><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>飬mΪ<6D><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ww 2016-11-01
int IsPtInPolygon(double x0, double y0, double* x, double* y, int m);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A(x1,y1),B(x2,y2)<29>ĵ<EFBFBD><C4B5><EFBFBD>(<28>ڻ<EFBFBD>)
double DotProduct(double x1, double y1, double x2, double y2);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A(x1,y1),B(x2,y2)<29>IJ<EFBFBD><C4B2><EFBFBD>(<28><><EFBFBD><EFBFBD>)
double CrossProduct(double x1, double y1, double x2, double y2);
int Offset(double k, double z, double &delt, double &h, BOOL bOffset); //<2F><><EFBFBD><EFBFBD><EFBFBD>ϵĵ<CFB5>ƫ<EFBFBD>ƻ<EFBFBD><C6BB><EFBFBD>ƫ<EFBFBD>ƣ<EFBFBD>б<CEAA><D0B1>
// dx = -z*dx; dy = -z*dy; z = -z*sqrt(1 - (dx^2 + dy^2) )
int Offset(double &dx, double &dy, double &z, BOOL bOffset); //<2F><><EFBFBD><EFBFBD><EFBFBD>ϵĵ<CFB5>ƫ<EFBFBD>ƻ<EFBFBD><C6BB><EFBFBD>ƫ<EFBFBD>ƣ<EFBFBD>dx<64><78>dxΪƫ<CEAA><C6AB>
//bOffset==TRUEʱ<45><CAB1><EFBFBD><EFBFBD>Offset2D<32><44>ΪFALSEʱ<45><CAB1><EFBFBD><EFBFBD>UnOffset2D
int Offset2D(double k, double z, double &delt, double &h); //<2F><><EFBFBD><EFBFBD><EFBFBD>ϵĵ<CFB5>ƫ<EFBFBD><C6AB>
int UnOffset2D(double k, double h, double &delt, double &z); //<2F><><EFBFBD><EFBFBD><EFBFBD>ϵĵ㷴ƫ<E3B7B4><C6AB>
public:
double GetAngle(double x1, double y1, double x2, double y2, double x3, double y3); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1>֮<EFBFBD><D6AE><EFBFBD>ļн<C4BC>
double GetAngle(double x1, double y1, double x2, double y2); //<2F><><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD><58>֮<EFBFBD><D6AE><EFBFBD>ļн<C4BC>
double GetAngle(double x, double y);
double GetAzimuth(double x1, double y1, double x2, double y2); //<2F><><EFBFBD>㷽λ<E3B7BD><CEBB>
double ToDegree(double dms); //<2F><><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA>
double ToDMS(double degree); //<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD>
void GetKB(double x1, double y1, double x2, double y2, double &k, double &b);//<2F><><EFBFBD><EFBFBD>ֱ<EFBFBD>߷<EFBFBD><DFB7>̲<EFBFBD><CCB2><EFBFBD>
BOOL GetKB(int num, double *x, double *y, double &k, double &b); //<2F><>С<EFBFBD><D0A1><EFBFBD>˷<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, num>2, <20><><EFBFBD><EFBFBD>ֱ<EFBFBD>߷<EFBFBD><DFB7><EFBFBD>(Y=kX+b)
//<2F><>С<EFBFBD><D0A1><EFBFBD>˷<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>ظ߳<D8B8> ww 2021.4.22
double LeastSquareFit(std::vector<CPoint3D>& points, double x0, double y0);
//<2F><>С<EFBFBD><D0A1><EFBFBD>˷<EFBFBD>ƽ<EFBFBD><C6BD>fitting by a plane h(x,y) = barH + barA0*(x-barX) + barA1*(y-barY) -- ww 2021.4.22
bool LeastSquarePlane(std::vector<CPoint3D>& points, double& barX, double& barY, double& barH,
double& barA0, double& barA1);
int Gauss(int n, double *a, double *c);
double GetAreaTrue(int num, double* x, double* y); //<2F><><EFBFBD>պ<EFBFBD><D5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵҲ<D6B5><D2B2><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD>ֵ
double GetArea(int num, double *x, double *y); //<2F><><EFBFBD>պ<EFBFBD><D5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>,GetArea()=fabs(GetAreaTrue())
//<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>pt1,pt2 <20><>pt2, pt3֮<33><D6AE><EFBFBD>ļн<C4BC>cosֵ
double GetCosinValue(CPoint2D& pt1, CPoint2D& pt2, CPoint2D& pt3);
//<2F><><EFBFBD><EFBFBD><EFBFBD>߱߳<DFB1><DFB3>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD>
double TriArea(double a, double b, double c);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A(x1,y1) B(x2,y2) C(x3,y3)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B<EFBFBD>Ľ<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>AC<41>߽<EFBFBD><DFBD><EFBFBD>(x0,y0)<29><><EFBFBD><EFBFBD>ABC<42><43><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD>Ͼ<EFBFBD><CFBE><EFBFBD>Ϊ1<CEAA><31><EFBFBD><EFBFBD>һ<EFBFBD><D2BB> ww
bool GetAngularBisector(double x1, double y1, double x2, double y2, double x3, double y3, double& x0, double& y0);
//x1,y1,x2,y2,x3,y3Ϊ<33><CEAA><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>꣬x,y,r<>з<EFBFBD><D0B7>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Բ<EFBFBD><D4B2>Բ<EFBFBD><D4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BOOL GetCircumcenter(double &x, double &y, double &r,
double x1, double y1,
double x2, double y2,
double x3, double y3);
double GetFirstValue(double x, double step);
double GetCanonicalStep(double step); //<2F><><EFBFBD>ù淶<C3B9><E6B7B6><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ12<31><32><EFBFBD><EFBFBD>10<31><30>0.13=0.1
double ContourStep(double m_step);
int GetCycValue(int i, int T);
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>ã<EFBFBD> (x0,y0)Ϊ<><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ww 2019.7.3
void GetGravityCenter(double* xx, double* yy, int num, double& x0, double& y0);
//<2F><><EFBFBD>õȱ߶<C8B1><DFB6><EFBFBD><EFBFBD>εĶ<CEB5><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// centerPoint <20><><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>
// endPoint <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD>
// polyNum <20>ȱ߶<C8B1><DFB6><EFBFBD><EFBFBD>εı<CEB5><C4B1><EFBFBD>
void GetEquilateralPolyPoints(CPointList& pl, dfPoint &centerPoint, dfPoint &endPoint, int polyNum);
//<2F><><EFBFBD>ݽǶȻ<C7B6><C8BB><EFBFBD>Բ<EFBFBD>ϵĵ<CFB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
dfPoint GetPointOnCircle(dfPoint& centerPoint, double r, double angle);
//<2F><>ȡ<EFBFBD>߶<EFBFBD>S(x1,y1)(x2,y2)<29><><EFBFBD>д<EFBFBD><D0B4><EFBFBD><72>д<EFBFBD><D0B4>߶˵㵽<CBB5>߶<EFBFBD>S<EFBFBD>ľ<EFBFBD><C4BE><EFBFBD> ww dstPts[0] = left dstPts[1] = right
bool GetMidPerpendicular(const CPoint2D& pt1, const CPoint2D& pt2, double r, std::vector<CPoint2D>& dstPts);
//<2F><><EFBFBD>ݽǶȻ<C7B6><C8BB><EFBFBD><EFBFBD><EFBFBD>Բ<EFBFBD>ϵĵ<CFB5><C4B5><EFBFBD><EFBFBD><EFBFBD>
bool GetPointOnEllipse(double &x, double& y, const CSize8& szRadius, double angle);
bool GetPointOnEllipse(double &x, double& y, const CPoint2D& centerPoint, const CSize8& szRadius, double angle);
//<2F><>ȡ<EFBFBD><C8A1>Բ<EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1> centerpoint = <20><><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD> <20><>szRadius = <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B3A4> <20><>x0,y0) = <20><><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD> <20><>Ϊ<EFBFBD><CEAA><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>1e20
double GetKOnEllipse(double x0, double y0, const CPoint2D& centerPoint, const CSize8& szRadius);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD> --- wangcw
bool Smooth53(double* val, int n, int stimes = 1);
//h0 Ϊ<><CEAA><EFBFBD>룬m<EBA3AC><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>h1<68><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>n=<3D><><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>time=ƽ<><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E3BBAC>ȡƽ<C8A1><C6BD>
double PointSmooth(double *h0, int m, double *h1, int n, int time);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȨУ<C8A8><D0A3><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>x,y,z,mΪ<6D><CEAA><EFBFBD><EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>x0,y0Ϊ<30><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>꣬kͨ<6B><CDA8>Ϊ2
double Weight2D(double x0, double y0, int m, double *x, double *y, double *z, double k);
//<2F><>ά<EFBFBD><CEAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȨУ<C8A8><D0A3><EFBFBD><EFBFBD>ʽ
double Weight3D(double x0, double y0, double t0, int m, double *x, double *y, double *t, double *z, int k);
//<2F>ж϶<D0B6><CFB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ϊ˳ʱ<CBB3>ӷ<EFBFBD><D3B7><EFBFBD>
bool IsClockWise(double* x, double* y, int num);
//<2F>ж<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>true <20><> <20><><EFBFBD><EFBFBD>false ww
bool IsCollinear(double*x, double* y, int num, double prec = 1e-10);
//<2F>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<E1B7B6>Ϳ̱<CDBF><CCB1><EFBFBD><EFBFBD><EFBFBD> ww 2019.7.9
void AdjustAxis(double& minV, double& maxV, int& numTicks);
//<2F><><EFBFBD><EFBFBD>p1<70><31>p2ָ<32><D6B8><EFBFBD><EFBFBD>ֱ<EFBFBD>߻<EFBFBD><DFBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(szLength.cy<63>Ǽ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>ȣ<EFBFBD>cx<63>Ǽ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>)
BOOL GetArrowPoint3(CPoint2D p1, CPoint2D p2, CPoint2D* pOutPoint3, CSize8 szLength);
//<2F><><EFBFBD><EFBFBD>ptStart<72><74>ptEnd<6E><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD>curPoint<6E><74><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>γ<EFBFBD>angle<6C><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void GetAnglePoint(CPoint2D& curPoint, CPoint2D ptStart, CPoint2D ptEnd, double angle);
public:
///> dec=0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>dec<65><63>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void SortDouble(int num, double *x, int dec = 0); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
///><3E><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD>п<EFBFBD><D0BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
///> numΪ<6D><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
///> col<6F><6C>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>0<EFBFBD><30>x<EFBFBD>ţ<EFBFBD>1<EFBFBD><31>y<EFBFBD>ţ<EFBFBD>2<EFBFBD><32>z<EFBFBD><7A>
///> dec=0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>dec<65><63>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void SortXYZ(double *x, double *y, double *z, int num, int colSort, int dec);
void SortXY(double *x, double *y, int num, int colSort, int dec);
public:
//ASCII<49><49><EFBFBD>ļ<EFBFBD><C4BC>Ķ<EFBFBD>д
//int ReadString(CFile& fr, CString& str);
//int GetString(CFile& fr, CString& str);
BOOL IsLineEnd_GetString(int result); //<2F>ж<EFBFBD>GetString<6E><67><EFBFBD>ص<EFBFBD>ֵ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ʾһ<CABE>еĽ<D0B5><C4BD><EFBFBD>
//int ReadString(CFile & fr, char* str); //<2F><>ȡһ<C8A1><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
//int GetString(CFile& fr, char* str); //<2F><>ȡһ<C8A1><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Կո<D4BF><D5B8><EFBFBD><EFBFBD>س<EFBFBD>Ϊ<EFBFBD><CEAA>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
//int ReadString(CFile & fr); //<2F><>ȡһ<C8A1><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//int GetString(CFile& fr); //<2F><>ȡһ<C8A1><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Կո<D4BF><D5B8><EFBFBD><EFBFBD>س<EFBFBD>Ϊ<EFBFBD><CEAA>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//char* GetTempString(void); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
//int GetTempStringLength(void); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><E9B3A4>
//void ZeroTempString(void); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
void ReverseString(char *string, int n);
int ReplaceChar(char* pString, char old_char, char new_char);
int FindString(char* pString, char* pSearchString, int nStartPos = 0);
int ReverseFind(const char* pString, char cFind); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
//void SerializeString(CArchive& ar, CString& str, const short& ver);
//void WriteChar(CFile &fw, LPCTSTR lpstr, int nTimes=1); //д<><D0B4>nTimes<65><73><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
//void WriteLine(CFile &fw, LPCTSTR lpstr, int nTabNum); //<2F><><EFBFBD><EFBFBD>nTabNum<75><6D>tab<61><62><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>дһ<D0B4><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
//void WriteLine(CFile &fw, CString str); //дһ<D0B4><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD>س<EFBFBD>),<2C><>WriteString<6E><67>WriteReturn<72><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//void WriteString(CFile &fw, CString str, int nTabNum=0); //дһ<D0B4><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//void WriteString(CFile &fw, double value, int n=6); //дһ<D0B4><D2BB>˫<EFBFBD><CBAB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//void WriteString(CFile &fw, long value); //дһ<D0B4><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//void WriteReturn(CFile& fw); //дһ<D0B4><D2BB><EFBFBD>س<EFBFBD>
//void WriteXY(CFile& fw, double x, double y, char cSplit=','); //дX,Y<><59><EFBFBD><EFBFBD>
//void WriteXY(CFile& fw, double& x, double& y, double& z, char cSplit);
//BOOL WriteFile(LPCTSTR lpSaveFileName, void* pBuffer, DWORD nBufferSize); //<2F><><EFBFBD>ٱ<EFBFBD><D9B1><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
////<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
//void SetErrorInfo(LPCTSTR lpszErrorInfo);
//CString GetErrorInfo(void);
public:
void ExchangeXY(double& x, double& y); //x,y<><79><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
void Swap(double& x, double& y); //x,y<><79><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
void Swap(float& x, float& y); //x,y<><79><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
////Ϊ<><CEAA>дԪ<D0B4><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(int <20><> short)<29><>
//void WriteElementType(CArchive& ar, int nType, const short& ver);
//void ReadElementType(CArchive& ar, int &nType, const short& ver);
// //Progress
// void SetProgress(CProgressCtrl* pProgress);
// CProgressCtrl* GetProgress(void);
// void SetProgressPos(int nPos);
//Convert a string to uppercase
static char* StrUpr(char* str);
CString GetSplitPath(/*const*/ CString sFullPathName, CString context = _T("ext"));
//split the path into given strings
#ifdef _QT_VERSION
static bool SplitPath(const char* fullPath, char* drive, char* dir, char* fname, char* ext);
static bool SplitPath(const wchar_t* fullPath, wchar_t* drive, wchar_t* dir, wchar_t* fname, wchar_t* ext);
// static QColor ulongToQColor(unsigned long color);
#endif
//<2F><>ɢ<EFBFBD><C9A2><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EAB1A3><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>x<EFBFBD><78>y<EFBFBD><79>
int GetOutline(int num, double *x, double *y);
// <20>õ<EFBFBD>ɢ<EFBFBD><C9A2><EFBFBD><EFBFBD>͹<EFBFBD><CDB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭʼ<D4AD>㼯p<E3BCAF><70>СΪn<CEAA><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵΪ͹<CEAA><CDB9><EFBFBD><EFBFBD>С<><CDB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>convex<65><78>
int GetConvexHull(int n, CPoint2D* s_points, CPoint2D* convex, int maxsize = 1, int dir = 1);
//<2F><><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD>߶εĽ<CEB5><C4BD><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD>ޣ<EFBFBD><DEA3><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD>غϣ<D8BA><CFA3><EFBFBD><EFBFBD><EFBFBD>2. ww 2015-10-27
//<2F><><EFBFBD><EFBFBD> a,bΪֱ<CEAA><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>lx0,ly0Ϊֱ<CEAA><D6B1><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EAA3AC>sx1,sy1)(sx2,sy2)Ϊ<>߶<EFBFBD><DFB6><EFBFBD><EFBFBD>˵㣬<CBB5><E3A3AC><EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD>(cx,cy)Ϊ<><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int SegLineCrossPoint(double a, double b, double lx0, double ly0,
double sx1, double sy1, double sx2, double sy2, double& cx, double& cy);
////xml<6D><6C>ʽ<EFBFBD><EFBFBD><E6B1BE>
//void SetXmlVersion(double dVer);
//double GetXmlVersion();
//<2F><><EFBFBD>ʽ
//void ConvertGBKToUTF8(CString& strGBK, bool checkCodec = true);
//void SetCodeType(DWORD nType);
//DWORD GetCodeType();
//<2F><>ӡ<EFBFBD><D3A1>ת
void SetPrintRotatePt(CPoint pt);
CPoint GetPrintRotatePt();
void SetPrintRotateAngle(double angle);
double GetPrintRotateAngle();
//<2F>շ<EFBFBD><D5B7><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ʽ
void SetInsertDrawMode(DWORD mode);
DWORD GetInsertDrawMode();
//<2F><><EFBFBD><EFBFBD>С<EFBFBD><D0A1>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>-1Ϊ<31><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
void SetTxtDecimalDgts(int i);
int GetTxtDecimalDgts();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ
void EnableSaveThumbImage(BOOL bSave);
BOOL IsSaveThumbImage();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void EnalbeAntialias(BOOL bAntialias);
BOOL IsAntialias();
//ִ<><D6B4>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
HANDLE ExecuteCommand(LPCTSTR lpFileCommand, LPCTSTR lpFileParameters, LPCTSTR lpFileDirectory, int nWinShow = SW_SHOW);
//<2F><>ȡģ<C8A1><C4A3>·<EFBFBD><C2B7>
CString GetModulePath();
int GetDPIX(int x);
int GetDPIY(int y);
CPoint GetDPIPoint(CPoint pt);
CRect GetDPIRect(CRect rt);
CSize GetDPISize(CSize sz);
public:
///move from Pline.h
void enspl(double *x, double *y, int n, int k, double t, double *s); //<2F><EFBFBD><E2BBAC><EFBFBD>Ⱦ<EFBFBD><C8BE><EFBFBD>ֵ<EFBFBD><D6B5>k=-1,t<><74>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>x<EFBFBD><78><EFBFBD>꣬sΪ<73><CEAA><EFBFBD><EFBFBD>ʽϵ<CABD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ5<CEAA><35>s[0]<5D><>s[1]<5D><>s[2]<5D><>s[3]Ϊ<><CEAA>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽϵ<CABD><CFB5><EFBFBD><EFBFBD>s[4]Ϊ<><CEAA><EFBFBD>ص<EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>
double enlgr(double *x, double *y, int n, double t); //һԪȫ<D4AA><C8AB><EFBFBD><EFBFBD>Ⱦࣨ<C8BE><E0A3A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>գ<EFBFBD><D5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>
double enlg3(double *x, double *y, int n, double t); //һԪ<D2BB><D4AA><EFBFBD><EFBFBD>Ⱦࣨ<C8BE><E0A3A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>գ<EFBFBD><D5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>
double enpqs(double *x, double *y, int n, double t); //<2F><><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD>Ⱦࣨ<C8BE><E0A3A8><EFBFBD>ã<EFBFBD>
double enhmt(double *x, double *y, double *dy, int n, double t); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><D8B2>Ⱦ<EFBFBD><C8BE><EFBFBD>ֵ<EFBFBD><D6B5>dyΪn<CEAA><6E><EFBFBD><EFBFBD><EFBFBD>Ⱦ<EFBFBD><C8BE>ڵ<EFBFBD><DAB5>ϵ<EFBFBD>һ<EFBFBD>׵<EFBFBD><D7B5><EFBFBD>ֵ
double enatk(double *x, double *y, int n, double t, double dEps); //<2F><><EFBFBD>ؽ𲻵Ⱦ<F0B2BBB5><C8BE><EFBFBD>ֵ dEps<70><73>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>
double espl1(double *x, double *y, int n, double *dy, double *ddy, double *t, int m, double *z, double *dz, double *ddz);//<2F><>һ<EFBFBD>ֱ߽<D6B1><DFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ˵<D6B5><CBB5><EFBFBD><EFBFBD>x,y,dy,ddy<64><79><EFBFBD><EFBFBD><E9B3A4>Ϊn<CEAA><6E>dy[0]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD>һ<EFBFBD>׵<EFBFBD><D7B5><EFBFBD><EFBFBD><EFBFBD>dy[n-1]<5D><><EFBFBD><EFBFBD><EFBFBD>Ҷ˵<D2B6><CBB5><EFBFBD>һ<EFBFBD>׵<EFBFBD><D7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>n<EFBFBD><6E><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD>һ<EFBFBD>׵<EFBFBD><D7B5><EFBFBD><EFBFBD><EFBFBD>ddyΪ<79><CEAA><EFBFBD>׵<EFBFBD><D7B5><EFBFBD><EFBFBD><EFBFBD>tΪҪ<CEAA><D2AA>ֵ<EFBFBD>Ľڵ<C4BD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊm<CEAA><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>z<EFBFBD><7A>dz<64><7A>ddz<64>ֱ<EFBFBD>Ϊ<EFBFBD>ڵ㴦<DAB5><E3B4A6>ֵ<EFBFBD><D6B5>һ<EFBFBD>׵<EFBFBD><D7B5><EFBFBD><EFBFBD>Ͷ<EFBFBD><CDB6>׵<EFBFBD><D7B5><EFBFBD><EFBFBD><EFBFBD>
double espl2(double *x, double *y, int n, double *dy, double *ddy, double *t, int m, double *z, double *dz, double *ddz);//<2F>ڶ<EFBFBD><DAB6>ֱ߽<D6B1><DFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>ddy[0]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD>һ<EFBFBD>׵<EFBFBD><D7B5><EFBFBD><EFBFBD><EFBFBD>ddy[n-1]<5D><><EFBFBD><EFBFBD><EFBFBD>Ҷ˵<D2B6><CBB5>Ķ<EFBFBD><C4B6>׵<EFBFBD><D7B5><EFBFBD>
double espl3(double *x, double *y, int n, double *dy, double *ddy, double *t, int m, double *z, double *dz, double *ddz);//<2F><><EFBFBD><EFBFBD><EFBFBD>ֱ߽<D6B1><DFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>y[0]=y[n-1];
///////////////////////////////////////<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD>ϳ<EFBFBD><CFB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC>㣺yy=a[0]+a[1]*xx+a[2]*xx*xx+a[3]*xx*xx*xx+a[4]*xx*xx*xx*xx;
void hpir1(double *x, double *y, int n, double *a, int m, double *dt);//<2F><>С<EFBFBD><D0A1><EFBFBD>˷<EFBFBD><CBB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,nΪ<6E><CEAA>֪<EFBFBD><D6AA><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><6D><CEAA><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>x<EFBFBD>ģ<EFBFBD>m<EFBFBD><6D>1<EFBFBD><31><EFBFBD>η<EFBFBD><CEB7><EFBFBD>m<n,m<20,aΪ<61><CEAA><EFBFBD>صĶ<D8B5><C4B6><EFBFBD>ʽϵ<CABD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊm<CEAA><6D>dtΪ<74><CEAA><EFBFBD><EFBFBD>Ϊ3<CEAA><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void hchir(double *x, double *y, int n, double *a, int m); //<2F>б<EFBFBD>ѩ<EFBFBD><D1A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><6E><CEAA>֪<EFBFBD><D6AA><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><6D><CEAA><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>m<n,m<20,aΪ<61><CEAA><EFBFBD>صĶ<D8B5><C4B6><EFBFBD>ʽϵ<CABD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊm+1,a[m]<5D><><EFBFBD>ض<EFBFBD><D8B6><EFBFBD>ʽƫ<CABD><C6AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
//<2F>ԣ<EFBFBD>x<EFBFBD><78>y<EFBFBD><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>y=ax+b<><62><EFBFBD>Իع<D4BB>
void isqt1(double *x, double *y, int n, double *a, double *dt); //һԪ<D2BB><D4AA><EFBFBD>Իع飬<D8B9><E9A3AC><EFBFBD><EFBFBD>b=a[0],a=a[1]<5D><>dt[0]:<3A><><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>ƽ<EFBFBD><C6BD><EFBFBD>ͣ<EFBFBD>dt[1]ƽ<><C6BD><EFBFBD><EFBFBD>׼ƫ<D7BC>dt[2]<5D>ع<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD>ͣ<EFBFBD>dt[3]<5D><><EFBFBD><EFBFBD>ƫ<EFBFBD>dt[4]<5D><>Сƫ<D0A1>dt[5]ƫ<><C6AB>ƽ<EFBFBD><C6BD>ֵ<EFBFBD><D6B5>
void ilog1(int n, double *x, double *y, double t, double *a); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD>Ҫ<EFBFBD><D2AA>y[i]>0<><30><74><CEAA><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>t>0<><30>a<EFBFBD><61><EFBFBD><EFBFBD><E9B3A4>Ϊ7<CEAA><37>a[0]:<3A><><EFBFBD>Ϻ<EFBFBD><CFBA><EFBFBD>y=b*pow(t,ax)<29>е<EFBFBD>b<EFBFBD><62>a[1]Ϊ<><CEAA><EFBFBD><EFBFBD>ʽ<EFBFBD>е<EFBFBD>a<EFBFBD><61>a[2]Ϊƫ<CEAA><C6AB>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>,a[3]Ϊƽ<CEAA><C6BD><EFBFBD><EFBFBD>׼ƫ<D7BC><C6AB>,a[4]Ϊ<><CEAA><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>,a[5]Ϊ<><CEAA>Сƫ<D0A1><C6AB>,a[6]ƫ<><C6AB>ƽ<EFBFBD><C6BD>ֵ
void ilog2(int n, double *x, double *y, double *a); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD>Ҫ<EFBFBD><D2AA>x[i]>0;y[i]>0<><30>a<EFBFBD><61><EFBFBD><EFBFBD><E9B3A4>Ϊ7<CEAA><37>a[0]Ϊ<><CEAA><EFBFBD>Ϻ<EFBFBD><CFBA><EFBFBD>y=b*pow(x,a)<29>е<EFBFBD>b<EFBFBD><62>a[1]Ϊ<><CEAA><EFBFBD><EFBFBD>ʽ<EFBFBD>е<EFBFBD>a<EFBFBD><61>a[2]Ϊƫ<CEAA><C6AB>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>,a[3]Ϊƽ<CEAA><C6BD><EFBFBD><EFBFBD>׼ƫ<D7BC><C6AB>,a[4]Ϊ<><CEAA><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>,a[5]Ϊ<><CEAA>Сƫ<D0A1><C6AB>,a[6]ƫ<><C6AB>ƽ<EFBFBD><C6BD>ֵ
__int64 IntegerTransfer(__int64 vv);
protected:
static int _compare_double_asc(const void *d1, const void *d2); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static int _compare_double_dec(const void *d1, const void *d2); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><>άָ<CEAC><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ww 2017-6-29
static int _compare_double_pointer_asc(const void *d1, const void *d2); //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static int _compare_double_pointer_dec(const void *d1, const void *d2); //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9BDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};
};
using namespace GBase;
extern GBase::CBaseFunction Gbf;
extern "C" AFX_EXT_API GBase::CBaseFunction* WINAPI GGetBaseFunction();
extern "C" AFX_EXT_API GBase::CBaseFunction* GGetPublicFunction();
extern "C" AFX_EXT_API BOOL* WINAPI AfxGetNo_Trim_Zero();
extern "C" AFX_EXT_API void WINAPI SetVert(TRIVERTEX &v, int x, int y, COLORREF cr);
//extern CString m_strPathModule; //<2F><>ǰģ<C7B0><C4A3>·<EFBFBD><C2B7>
//extern HWND m_hWndModule; //<2F><>ǰģ<C7B0><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ھ<EFBFBD><DABE><EFBFBD>
extern "C" AFX_EXT_API void WINAPI AfxSetModulePath(CString strPath);
extern "C" AFX_EXT_API HWND WINAPI AfxGetModuleHwnd();
extern "C" AFX_EXT_API void WINAPI AfxSetModuleHwnd(HWND hWnd);
#ifdef _QT_VERSION
extern "C" AFX_EXT_API void WINAPI DeleteFile(CString strFile);
#endif //_QT_VERSION
//extern "C" TRIVERTEX AFX_EXT_DATA vert[5];
//extern "C" GRADIENT_TRIANGLE AFX_EXT_DATA gTRi[4];
//extern "C" double AFX_EXT_DATA __z[4];
#ifdef _QT_VERSION //Qt's similiar functions as WINAPI --ww 2017.12.28
// read or write ini file
extern "C" AFX_EXT_API DWORD GetPrivateProfileString(LPCSTR lpAppName, LPCSTR lpKeyName, LPCSTR lpDefault, LPSTR lpReturnedString, DWORD nSize, LPCSTR lpFileName);
extern "C" AFX_EXT_API DWORD GetPrivateProfileSection(LPCTSTR lpAppName, LPTSTR lpReturnedString, DWORD nSize, LPCTSTR lpFileName);
extern "C" AFX_EXT_API BOOL WritePrivateProfileString(LPCSTR lpAppName, LPCSTR lpKeyName, LPCSTR lpString, LPCSTR lpFileName);
//retrieves the path for the file that contains the specified module that the current process owns
extern "C" AFX_EXT_API DWORD GetModuleFileName(void* hModule, LPTSTR lpFilename, DWORD nSize);
extern "C" AFX_EXT_API void GetLocalTime(SYSTEMTIME* t);
extern "C" AFX_EXT_API int MultiByteToWideChar(
UINT CodePage, // code page
DWORD dwFlags, // character-type options
LPCSTR lpMultiByteStr, // string to map
int cbMultiByte, // number of bytes in string
LPWSTR lpWideCharStr, // wide-character buffer
int cchWideChar // size of buffer);
);
extern "C" AFX_EXT_API int WideCharToMultiByte(
UINT CodePage, // code page
DWORD dwFlags, // performance and mapping flags
LPCWSTR lpWideCharStr, // wide-character string
int cchWideChar, // number of chars in string.
LPSTR lpMultiByteStr, // buffer for new string
int cbMultiByte, // size of buffer
LPCSTR lpDefaultChar, // default for unmappable chars
LPBOOL lpUsedDefaultChar // set when default char used);
);
#endif
#define AfxGetDPIX(x) AfxGetBaseFunction()->GetDPIX(x)
#define AfxGetDPIY(y) AfxGetBaseFunction()->GetDPIY(y)
#define AfxGetDPIPoint(pt) AfxGetBaseFunction()->GetDPIPoint(pt)
#define AfxGetDPIRect(rt) AfxGetBaseFunction()->GetDPIRect(rt)
#define AfxGetDPISize(sz) AfxGetBaseFunction()->GetDPISize(sz)
//extern "C"
//{
// AFX_EXT_API TRIVERTEX* WINAPI AfxGetvert();
// AFX_EXT_API GRADIENT_TRIANGLE* WINAPI AfxGetgTRi();
// AFX_EXT_API double* WINAPI AfxGet__z();
//};
///////////////////////////////////////////////////////////////////
//////<2F><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD>
// dx=(x[pnum-1]-x[0])/num;
// fw.WriteString("\nlayer m ԭʼ<D4AD><CABC> \npline\n");
// for(j=0;j<pnum;j++)
// {
// str.Format("%lf,%lf\n",x[j],y[j]);
// fw.WriteString(str);
// }
// if(m_mode==0)//<2F><><EFBFBD>Բ<EFBFBD>ֵ;
// {
// double y0;
// fw.WriteString("\nlayer m <20><><EFBFBD>Բ<EFBFBD>ֵ \npline\n");
// for(j=0;j<num;j++)
// {
// xx=x[0]+dx*j;
// bf.LineValue(y0,x,y,pnum,xx,TRUE,FALSE);
// str.Format("%lf,%lf\n",xx,y0);
// fw.WriteString(str);
// }
// }
// if(m_mode==1)//<2F><EFBFBD><E2BBAC><EFBFBD>Ⱦ<EFBFBD><C8BE><EFBFBD>ֵ;
// {
// fw.WriteString("\nlayer m <20><EFBFBD><E2BBAC><EFBFBD>Ⱦ<EFBFBD><C8BE><EFBFBD>ֵ \npline\n");
// for(j=0;j<num;j++)
// {
// xx=x[0]+dx*j;
// bf.enspl(x,y,pnum,-1,xx,a);
// str.Format("%lf,%lf\n",xx,a[4]);
// fw.WriteString(str);
// }
// }
// if(m_mode==2)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ;
// {
// fw.WriteString("\nlayer m <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ \npline\n");
// dy[0]=(y[1]-y[0])/(x[1]-x[0]);
// dy[pnum-1]=(y[pnum-1]-y[pnum-2])/(x[pnum-1]-x[pnum-2]);
// dfcreate1(num);
// for(j=0;j<num;j++)
// {
// t[j]=x[0]+j*dx;
// }
// bf.espl1(x,y,pnum,dy,dyy,t,num,z,dz,ddz);
// for(j=0;j<num;j++)
// {
// str.Format("%lf,%lf\n",t[j],z[j]);
// fw.WriteString(str);
// }
// }
// if(m_mode==3)//<2F><>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
// {
// if(pnum<m_time)
// {
// str.Format("ԭ<><D4AD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%d,<2C><><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>С<EFBFBD><D0A1> %d<><64>",pnum,pnum);
// ::AfxMessageBox(str);return;
// }
// if(m_time>=20){::AfxMessageBox("<22><><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>С<EFBFBD><D0A1> 20<32><30>");return;}
// fw.WriteString("\nlayer m <20><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>\npline\n");
// sum=0;
// for(j=0;j<pnum;j++)
// {
// sum=sum+x[j];
// }
// sum=sum/pnum;
// bf.hpir1(x,y,pnum,a,m_time,dt);//m_time<6D>ζ<EFBFBD><CEB6><EFBFBD>ʽ
// for(j=0;j<num;j++)
// {
// xx=x[0]+dx*j;
// zz=xx-sum;
// yy=0;
// for(int i=0;i<m_time;i++)
// {
// yy=yy+a[i]*pow(zz,i);
// }
// //yy=a[0]+a[1]*pow(zz,1)+a[2]*pow(zz,2)+a[3]*pow(zz,3)+a[4]*pow(zz,4)+a[5]*pow(zz,5)+a[6]*pow(zz,6)+a[7]*pow(zz,7);
// //yy=a[0]+a[1]*zz+a[2]*zz*zz+a[3]*zz*zz*zz+a[4]*zz*zz*zz*zz+a[5]*zz*zz*zz*zz*zz+a[6]*zz*zz*zz*zz*zz*zz+a[7]*zz*zz*zz*zz*zz*zz*zz;
// str.Format("%lf,%lf\n",xx,yy);
// fw.WriteString(str);
// }
// }
// if(m_mode==4)//<2F>б<EFBFBD>ѩ<EFBFBD><D1A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
// {
// if(pnum<m_time)
// {
// str.Format("ԭ<><D4AD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%d,<2C><><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>С<EFBFBD><D0A1> %d<><64>",pnum,pnum);
// ::AfxMessageBox(str);return;
// }
// if(m_time>=20){::AfxMessageBox("<22><><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>С<EFBFBD><D0A1> 20<32><30>");return;}
// fw.WriteString("\nlayer m <20>б<EFBFBD>ѩ<EFBFBD><D1A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n");
// bf.hchir(x,y,pnum,a,m_time); //m_time<6D>ζ<EFBFBD><CEB6><EFBFBD>ʽ
// fw.WriteString("\npline\n");
// for(j=0;j<num;j++)
// {
// xx=x[0]+dx*j;
// yy=0.0;
// for(int i=0;i<m_time;i++)
// {
// yy=yy+a[i]*pow(xx,i);
// }
//// yy=a[0]+a[1]*xx+a[2]*xx*xx+a[3]*xx*xx*xx+a[4]*xx*xx*xx*xx;
// str.Format("%lf,%lf\n",xx,yy);
// fw.WriteString(str);
// }
// }
// if(m_mode==5)//<2F><><EFBFBD>ؽ𲻵Ⱦ<F0B2BBB5><C8BE><EFBFBD>ֵ;
// {
// fw.WriteString("\nlayer m <20><><EFBFBD>ؽ𲻵Ⱦ<F0B2BBB5><C8BE><EFBFBD>ֵ\n");
// fw.WriteString("\npline\n");
// double eps=fabs((y[pnum-1]-y[0])/10000.0);
// for(j=0;j<num;j++)
// {
// xx=x[0]+dx*j;
// yy=bf.enatk(x,y,pnum,xx,eps);
// str.Format("%lf,%lf\n",xx,yy);
// fw.WriteString(str);
// }
// }
// if(m_mode==6)//һԪȫ<D4AA><C8AB><EFBFBD><EFBFBD>Ⱦࣨ<C8BE><E0A3A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>գ<EFBFBD>;
// {
// fw.WriteString("\nlayer m һԪȫ<D4AA><C8AB><EFBFBD><EFBFBD>Ⱦ<EFBFBD>\n");
// fw.WriteString("\npline\n");
// for(j=0;j<num;j++)
// {
// xx=x[0]+dx*j;
// yy=bf.enlgr(x,y,pnum,xx);
// str.Format("%lf,%lf\n",xx,yy);
// fw.WriteString(str);
// }
// }
// if(m_mode==7)//һԪ<D2BB><D4AA><EFBFBD><EFBFBD>Ⱦࣨ<C8BE><E0A3A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>գ<EFBFBD>;
// {
// fw.WriteString("\nlayer m һԪ<D2BB><D4AA><EFBFBD><EFBFBD>Ⱦ<EFBFBD>\n");
// fw.WriteString("\npline\n");
// for(j=0;j<num;j++)
// {
// xx=x[0]+dx*j;
// yy=bf.enlg3(x,y,pnum,xx);
// str.Format("%lf,%lf\n",xx,yy);
// fw.WriteString(str);
// }
// }
// if(m_mode==8)//<2F><><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD>Ⱦ<EFBFBD>;
// {
// fw.WriteString("\nlayer m <20><><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD>Ⱦ<EFBFBD>\n");
// fw.WriteString("\npline\n");
// for(j=0;j<num;j++)
// {
// xx=x[0]+dx*j;
// yy=bf.enpqs(x,y,pnum,xx);
// str.Format("%lf,%lf\n",xx,yy);
// fw.WriteString(str);
// }
// }
template<typename T>
void DeepEraseVector(std::vector<T>& vec)
{
for (int i = 0; i < (int)vec.size(); i++)
{
if (NULL != vec[i])
delete vec[i];
}
vec.clear();
}