我喜欢这样做,它适用于整数以及浮点坐标的方式是:
这可确保多边形内部每个点和外部每个点的偶数计数均正确,但对于边界上确切的点,它并不完全一致。如果对您而言很重要,则可能需要添加一条规则,即多边形上实际上包括线段上的任何点。
有更多方法可以解决此问题,但是我所知道的最安全的方法是
稍微改变射线方向
从数字上讲这是安全的,但实现起来并不像听起来那么容易。要么从一开始就更改整个光线并进行计算,要么在相关命中之前的某个位置进行更改。
您需要确保不形成诸如Z字形之类的闭环(因此,您需要在从原始方向的某个圆锥内旋转 CW 和 CCW 之间切换) )。
如果射线与多边形完全平行并且也接触多边形的边缘,则可以忽略该边缘或对其计数两次,或者再次更改射线方向。
更改射线方向始终是安全的,因为它可以避免奇异和数值不稳定性。
顺便说一句。您正在使用的这种内部多边形算法以命中测试
为名而闻名