1. 程式人生 > >幾何模板總結(二):點在多邊形內判定(轉角法)

幾何模板總結(二):點在多邊形內判定(轉角法)

直接上模板吧,適用於任何型別的多邊形(順時針,逆時針,凹,凸)

//p為點,poly為多邊形
int isinpoly(point p,vector<point> poly)
{
    int wn=0;
    int n=poly.size();
    for(int i=0;i<n;i++)
    {
        if(onseg(p,poly[i],poly[(i+1)%n])) return -1;   //在邊界上
        int k=dcmp(cross(poly[(i+1)%n]-poly[i],p-poly[i]));
        int d1=dcmp(poly[i].y-p.y);
        int d2=dcmp(poly[(i+1)%n].y-p.y);
        if(k>0 && d1<=0 && d2>0) wn++;
        if(k<0 && d2<=0 && d1>0) wn--;
    }
    if(wn!=0) return 1;     //內部
    return 0;               //外部
}