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

标签 java android geometry computational-geometry

在搜索多边形内的点测试时,我找到了 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/

相关文章:

android - 如何在 android 应用程序中使用 twitter api 仅发送推文

java - 固定方向时获取屏幕方向

algorithm - 找到圆锥的顶点,已知圆锥内切的球体

rotation - THREE.js:计算对象上的点的世界空间位置

java - 有没有比几个 if 语句更有效的方法来处理按钮点击事件?

java - 如果第一个数组中的所有项目都出现在第二个数组中,则返回 true

java - 将字节数组转换为 JSON 错误 JSON 无效

java - android notification pendingintent onNewintent 未调用

c# - 知道3点是否构成等边三角形

java - 在 JSP 页面中使用 java 类