在搜索多边形内的点测试时,我找到了 Dean Povey here 描述的测试。 。我喜欢这种方法,因为它很容易理解(沿 x 轴进行光线转换),但我遇到了与该方法的一个小不一致之处。在为我的实现编写单元测试时,我注意到,当将正方形作为“测试多边形”时,正方形左侧和底部边缘上的点被识别为多边形的一部分,而多边形右侧和顶部边缘上的点被识别为多边形外部。这是一张小图,显示了我的意思(+ 不被识别为内部,双线和 x 是):
+--------+
‖ |
‖ |
x========+
有谁知道如何更改算法以显示边缘点的一致行为?边缘是否被视为内部并不重要,只要行为一致即可。
最佳答案
要测试点 P
是否位于边 QR
上,请考虑将 Q
映射到原点并将 R
映射到点 (0, 1)
的变换。
使用复数,将此转换写为 Z = (z - Q)/(R - Q)
并使用 (P - Q)/(R - Q)
转换 P
。该数字必须是纯实数,其实部位于 [0, 1]
中。
您可以使用此测试来检测轮廓上的点。还可以通过允许虚部为较小的数字来允许公差。在这种情况下,建议对分母 R - Q
进行归一化,以便虚部成为到线段的欧几里得距离。
关于java - 简单的多边形内点测试,边缘行为一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51172250/