简单的多边形点测试,边缘行为一致

Easy point-in-polygon-test with consistant behaviour for edges

在搜索多边形中的点测试时,我找到了 Dean Povey here 描述的那个。我喜欢这种方法,因为它很容易理解(沿 x 轴的光线投射),但我发现该方法存在一些小的不一致之处。在为我的实现编写单元测试时,我注意到当将正方形作为 "Test-Polygon" 时,正方形左侧和底部边缘的点被识别为多边形的一部分,而多边形右侧和顶部的点被识别为在多边形之外。这是一张小图,显示了我的意思(+ 不被识别为内部,双线和 x 是):

+--------+
‖        |
‖        |
x========+

有谁知道如何更改算法以显示边缘点的一致行为?边缘是否被认为是内部并不重要,只是行为是一致的。

要测试点 P 是否位于边 QR 上,请考虑将 Q 映射到原点并将 R 映射到点 [=14] 的变换=].

使用复数,将此转换写为 Z = (z - Q) / (R - Q),并将 P 转换为 (P - Q) / (R - Q)。这个数字必须是纯实数并且它的实数部分在[0, 1].

您可以使用此测试来检测轮廓上的点。也可以通过允许虚部是一个小数来允许公差。在这种情况下,建议对分母进行归一化R - Q,使虚部成为到线段的欧式距离