gpt4 book ai didi

c++ - 绕数算法和凸边界/边上的点

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:37:15 27 4
gpt4 key购买 nike

我需要可以判断 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com