确定点是不是在多边形内

Posted

技术标签:

【中文标题】确定点是不是在多边形内【英文标题】:Determine if point is inside polygon确定点是否在多边形内 【发布时间】:2016-05-01 01:54:47 【问题描述】:

目前我正在使用光线投射算法,但是它有一些限制,例如当光线通过顶点时,无法确定它是否在内部。

我可以使用什么算法来始终适用于任何类型的多边形?

【问题讨论】:

here 可能会有所帮助 How can I determine whether a 2D Point is within a Polygon?的可能重复 整数还是浮点数? @maxim1000 没关系,可以是浮点数,也可以是整数,取决于哪个更容易/更准确。 【参考方案1】:

您可以根据多边形本身选择光线方向,使其不与任何顶点相交。

对于整数坐标,沿(1,0.5/deltaX) 投射光线就足够了,其中deltaX 是多边形顶点的x 坐标之间的最大差异。射线上具有整数坐标的第一个点将是它的起点。下一个将具有 x 坐标 startX+2*deltaX,它位于多边形之外并且不能是它的顶点。通过精确的算术,您可以稳健地确定点是内部还是外部。

对于浮点数,精确的算术是一个问题,因此您希望光线尽可能远离多边形顶点。为此,您可以计算每个多边形顶点atan2(y[n]-y,x[n]-x) 的方向并按它对顶点进行排序。然后在这个排序后的序列中选择相邻顶点之间最大的差异,并在它们之间投射光线。

【讨论】:

以上是关于确定点是不是在多边形内的主要内容,如果未能解决你的问题,请参考以下文章

如何在 N 时间内确定一个点是不是在 2D 凸多边形内

如何确定一个点是不是在二维凸多边形内?

确定一个点是不是位于传单多边形内

已知一个多边形的所有顶点坐标,如果确定一点是不是在这个多边形内?

如何判断一个指定的经纬度点是不是落在一个多边形区域内

如何判断一个指定的经纬度点是不是落在一个多边形区域内