作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我需要可以判断 Point 是位于凸包 (C/C++) 的内部/外部还是边界(边缘)上的算法。
凸包被描述为点 X,Y 的数组,整数,连接是从 i 到 i+1。
目前我正在使用绕组数算法,这里描述: http://geomalgorithms.com/a03-_inclusion.html它是函数“wn_PnPoly()”。
如果 Point 恰好位于凸的边界(边缘)上,是否有可能以及如何使绕组数算法检测到?还有另一种算法可以做到这一点吗? (需要处理整数)。
最佳答案
找到解决方案:
int wn_PnPoly2(Point P, vector<Point> V, int n)
{
int wn = 0; // the winding number counter
// loop through all edges of the polygon
for (int i = 0; i<n; i++) { // edge from V[i] to V[i+1]
if (V[i].Y <= P.Y) { // start y <= P.y
if (V[i + 1].Y > P.Y) // an upward crossing
{
int l = isLeft(V[i], V[i + 1], P);
if (l > 0) // P left of edge
++wn; // have a valid up intersect
else if (l == 0) // boundary
return 0;
}
}
else { // start y > P.y (no test needed)
if (V[i + 1].Y <= P.Y) // a downward crossing
{
int l = isLeft(V[i], V[i + 1], P);
if (l < 0) // P right of edge
--wn; // have a valid down intersect
else if (l == 0)
return 0;
}
}
}
return wn;
}
关于c++ - 绕数算法和凸边界/边上的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37703202/
我是一名优秀的程序员,十分优秀!