Geometry 删除多边形中的孔
我有一个由点数组决定的多边形 该多边形正在与自身相交,从而在多边形本身中形成一些孔 我的问题是:我怎么能省略这个洞,只得到多边形的外部点 或者什么是相同的并且可能更容易的:我应该使用哪种算法来检查一个点是否位于多边形内部,以将多边形孔中的点检测为内部点 提前感谢,Geometry 删除多边形中的孔,geometry,polygon,point-in-polygon,Geometry,Polygon,Point In Polygon,我有一个由点数组决定的多边形 该多边形正在与自身相交,从而在多边形本身中形成一些孔 我的问题是:我怎么能省略这个洞,只得到多边形的外部点 或者什么是相同的并且可能更容易的:我应该使用哪种算法来检查一个点是否位于多边形内部,以将多边形孔中的点检测为内部点 提前感谢, /罗杰首先,找到边的所有交点,将这些交点添加到“顶点”列表中,然后在这些交点处分割边。然后,从一个明显是外部顶点(例如“最右边”)开始,跟踪轮廓,将边和顶点添加到结果集中。跟踪轮廓只需沿边以最小角度移动到最后一条边。您可能希望找到多边
/罗杰首先,找到边的所有交点,将这些交点添加到“顶点”列表中,然后在这些交点处分割边。然后,从一个明显是外部顶点(例如“最右边”)开始,跟踪轮廓,将边和顶点添加到结果集中。跟踪轮廓只需沿边以最小角度移动到最后一条边。您可能希望找到多边形中所有点的凸包 一种算法是复杂度为O(nlgn)的Graham扫描。来自科曼:
Let Q be the set of all points in your polygon
Graham-Scan(Q)
1 let p0 be the point in q with the minimum y-coordinate or the leftmost in case of tie
2 let (p1, p2,...,pm) be the remaining points in Q, sorted by polar angle around p0
if more than one point shares the same polar angle, keep the farthest point
3 let S be an empty stack
4 PUSH(p0, S)
5 PUSH(p1, S)
6 PUSH(p2, S)
7 for i = 3 to m
8 while the angle formed by points NEXT_TO_TOP(S), TOP(S), and pi makes a non-left turn
9 POP(S)
10 PUSH(pi, S)
11 return S
S现在包含多边形的所有外部点。你必须做一些极坐标数学,但那很简单。若要按极坐标顺序排序,请对与最底点共切的所有点进行排序。我忘了检查右转的代码,但如果你只是从格雷厄姆扫描中搜索,它就在互联网上。希望这有帮助 这些边界点是否按特定顺序考虑?或者你只是递了一袋他们并告诉他们‘制作多边形’?考虑一个大致L形的多边形。生成的形状不应为凸面。换句话说,海报寻找的目标区域是凸包的严格子集。Svante的算法通过寻求角度的最小变化(角度的模数,如果您愿意)来避免这种情况,允许左转和右转。是否有任何样本来消除多边形的相交?