您的位置:首页 > 其它

判断点是否在多边形内

2017-05-06 17:09 225 查看
计算机图形学中经常需要判断点是否在多边形内,刚好最近写程序的时候遇到这个问题,原理很简单也就不在这里啰嗦了,当时抱着偷懒的心理随便在网上找了一段代码贴到程序里,好像不尽人意,或多或少的存在一些问题,经过多次尝试终于完美解决了,下面附上相关代码:

bool isInPolygon4(const QVector<QPoint>& pts, QPoint & pt)
{
unsigned vertCount = pts.size();
if (vertCount < 2)
{
return FALSE;
}
bool inside = FALSE;

for (unsigned i = 1 ; i <= vertCount ; ++i)
{
const QPoint &A = pts[i - 1];
const QPoint &B = pts[i % vertCount];
if ((B.y() <= pt.y() && pt.y() < A.y()) || (A.y() <= pt.y() && pt.y() < B.y()))
{
float t = (pt.x() - B.x())*(A.y() - B.y()) - (A.x() - B.x())*(pt.y() - B.y());
if (A.y() < B.y())
t = -t;
if (t < 0)
inside = !inside;
}
}
return inside;
}


由于我的工程是在Qt下的所以就用了Qt中的类,如果在非Qt工程下只需要替换成相关的类就行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: