1. 程式人生 > >通過C++實現判斷點與多邊形的關係和兩點之間的距離

通過C++實現判斷點與多邊形的關係和兩點之間的距離

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