通过C++实现判断点与多边形的关系和两点之间的距离

来源:互联网 发布:公司数据库搭建 编辑:程序博客网 时间:2024/05/01 17:54

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外}