通过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外
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力减肥的小胖子5

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值