简单的多边形测试,边缘表现一致

时间:2018-07-04 11:09:38

标签: java android geometry computational-geometry

在搜索多边形测试时,我发现了Dean Povey here描述的那个。我喜欢这种方法,因为它很容易理解(沿x轴进行射线投射),但是我遇到了与该方法的微小矛盾之处。在为实现编写单元测试时,我注意到以正方形作为“测试多边形”时,正方形左侧和底部边缘的点被识别为多边形的一部分,而多边形右侧和顶部的点被识别为多边形的一部分。被识别为多边形外部。这是一张小图,显示了我的意思(+未被识别为内部,双线和x是):

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

有人知道我如何更改算法以显示边缘点的一致行为吗?边缘是否被视为内部无关紧要,只是行为是一致的。

1 个答案:

答案 0 :(得分:0)

要测试点P是否位于边缘QR上,请考虑将Q映射到原点并将R映射到点(0, 1)的变换

使用复数,将此转换写为Z = (z - Q) / (R - Q),然后用P转换(P - Q) / (R - Q)。该数字必须是纯实数,并且其实数部分应位于[0, 1]中。

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