判断点是否在多边形内(C++)

/********************************/
// 参数:
// x: 点的x坐标
// y: 点的y坐标
// vertex: 多边形顶点组(顺时针或逆时针顺序)
// num: 多边形顶点数
//
// return: 点是否在多边形内
/*******************************/

bool IsInPolygon(float x, float y, float vertex[][2], int num)
{
    if( num < 3 )
        return false;

    int count = 0;
    for (int i = 0; i < num; i++)
    {
        float p1[2] = { vertex[i][0], vertex[i][1] };
        float p2[2] = { vertex[(i+1) % num][0], vertex[(i+1) % num][1] };

        if( p2[1] == p1[1])
            continue;

        if( y < p2[1] && y < p1[1])
            continue;

        if( y > p2[1] && y > p1[1])
            continue;

        float xx = (y - p1[1]) * ( p2[0] - p1[0]) / (p2[1] - p1[1]) + p1[0];

        if( xx >= x )
            count++;
    }
    
    return (count % 2 == 1);
}
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jianwen0529/article/details/18815193
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭