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的算法通过寻求角度的最小变化(角度的模数,如果您愿意)来避免这种情况,允许左转和右转。是否有任何样本来消除多边形的相交?