1.判断两点之间的距离
#include<math.h>
//计算两点之间的距离
double calculateDistence(double* p0,double* p){
double tempx = p[0] - p0[0];
double tempy = p[1] - p0[1];
double tempz = p[2] - p0[2];
//pow(x,y)--x的y次方
double radius2 = pow(tempx,2)+pow(tempy,2)+pow(tempz,2);
return sqrt(radius2);
}
2.判断点是是否在多边形内
#include<vector>
#include<math.h>
struct Point2D{
double x;
double y;
Point2D(double _x,double _y){
x = _x;
y = _y;
}
};
bool pointInPolygon11(double* _p,std::vector<double*>& _polygon){
int numCrossPoint = 0;
for(int i=0; i<_polygon.size(); i++){
double* p1 = _polygon.at(i);
//(i+1)/polygon.size()--处理最后一点与第一点相连接
double* p2 = _polygon.at((i+1)%_polygon.size());
//这是一条水平线
if(p2[1] == p1[1]){
if(p1[1] == _p[1]){
if(_p[0] <= fmax(p1[0],p2[0]) && _p[0] >= fmin(p1[0],p2[0])){
return 1;
}else{
continue;
}
}else{
continue;
}
}
if(_p[1] < fmin(p1[1],p2[1]) || _p[1] > fmax(p1[1],p2[1])){
continue;
}
//求点的水平射线与边的交点,通过直线的两点式方程
double x = (_p[1]-p1[1])*(p2[0]-p1[0])/(p2[1]-p1[1]) + p1[0];
//只统计与右射线的交点
if(x>=_p[0]){
++numCrossPoint;
}
}
return (numCrossPoint%2 == 1);//0外
}