确定点是否在多边形内

时间:2016-05-01 01:54:47

标签: algorithm polygon vertex

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

我可以使用哪种算法可以在任何类型的多边形中使用?

1 个答案:

答案 0 :(得分:1)

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

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

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