确定点是不是在多边形内
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)
的方向并按它对顶点进行排序。然后在这个排序后的序列中选择相邻顶点之间最大的差异,并在它们之间投射光线。
【讨论】:
以上是关于确定点是不是在多边形内的主要内容,如果未能解决你的问题,请参考以下文章