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