您的位置:首页 > 其它

判断一个点是否在多边形区域内

2012-11-07 21:13 218 查看
/*

函数的输入:

(1)当前点的坐标p

(2)区域顶点数组pt[];

(3)顶点数nCount

输出: 在区域内返回TRUE,否则返回FALSE。

Point类型是一个结构:

struct Point

{

类型 x;//此处类型根据采用的经纬度类型决定。

类型 y;

};

*/

BOOL PtInPolygon(Point p, Point pt[], int nCount)

{

int nCross = 0;

for (int i = 0; i < nCount; i++)

{

Point p1 = pt[i];

Point p2 = pt[(i + 1) % nCount];

if (p1.y == p2.y)

{

if (p.y == p1.y && p.x >= min(p1.x, p2.x) && p.x <= max(p1.x, p2.x))

return true;

continue;

}

if (p.y < min(p1.y, p2.y) || p.y > max(p1.y, p2.y))

continue;

double x = (double)(p.y - p1.y) * (double)(p2.x - p1.x) / (double)(p2.y - p1.y) + p1.x;

if (x > p.x)

nCross++;

else if (x == p.x)

return true;

}

if (nCross % 2 == 1)

return true;

return false;

}

建议转换成整形,因为浮点形的比较可能会出现边界问题
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: