判斷點是否在多邊形內(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);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章