偶数奇数算法如何计算多边形边?

时间:2018-10-10 02:20:15

标签: algorithm geometry intersection point-in-polygon

我想知道奇偶算法如何识别复杂多边形中的点。

我现在所知道的是,它将从最左边到该点进行水平搜索,并计算触摸的边数。

但是,如果触摸的边缘在2个边缘的交点处会发生什么?如何计算?

多边形示例:

Examples of polygons

2 个答案:

答案 0 :(得分:4)

我喜欢这样做,它适用于整数以及浮点坐标的方式是:

  • 对于非水平细分,每个细分都包括其最低点,但不包括其最高点。

  • 在偶数计数中根本不包括水平线段。

这可确保多边形内部每个点和外部每个点的偶数计数均正确,但对于边界上确切的点,它并不完全一致。如果对您而言很重要,则可能需要添加一条规则,即多边形上实际上包括线段上的任何点。

答案 1 :(得分:0)

有更多方法可以解决此问题,但是我所知道的最安全的方法是

稍微改变射线方向

从数字上讲这是安全的,但实现起来并不像听起来那么容易。要么从一开始就更改整个光线并进行计算,要么在相关命中之前的某个位置进行更改。

change ray direction

您需要确保不形成诸如Z字形之类的闭环(因此,您需要在从原始方向的某个圆锥内旋转 CW CCW 之间切换) )。

如果射线与多边形完全平行并且也接触多边形的边缘,则可以忽略该边缘或对其计数两次,或者再次更改射线方向。

更改射线方向始终是安全的,因为它可以避免奇异和数值不稳定性。

顺便说一句。您正在使用的这种内部多边形算法以命中测试

为名而闻名