java - 简单的多边形点测试,边缘行为一致
问题描述
在搜索多边形点测试时,我在这里找到了 Dean Povey 所描述的测试。我喜欢这种方法,因为它很容易理解(沿 x 轴的光线投射),但我遇到了与该方法的小不一致。在为我的实现编写单元测试时,我注意到当将正方形作为“测试多边形”时,正方形左侧和底部边缘的点被识别为多边形的一部分,而多边形右侧和顶部的点被识别为多边形之外。这是一张小图,显示了我的意思(+ 不被识别为内部,双线和 x 是):
+--------+
‖ |
‖ |
x========+
有谁知道我如何更改算法以显示边缘点的一致行为?边缘是否被认为是内部并不重要,只是行为是一致的。
解决方案
要测试点是否P
位于边上QR
,请考虑映射Q
到原点和R
点的变换(0, 1)
。
使用复数,将此转换写为Z = (z - Q) / (R - Q)
并转换P
为(P - Q) / (R - Q)
。这个数字必须是纯实数,它的实部在[0, 1]
.
您可以使用此测试来检测轮廓上的点。也可以通过允许虚部为小数来允许公差。在这种情况下,建议对分母进行归一化R - Q
,使虚部变为到线段的欧几里得距离。
推荐阅读
- excel - 创建多个工作表为 pdf,无限循环
- python - 将密集向量的行矩阵转换为 Pyspark 数据帧
- markdown - 在 vuejs 上自定义 markdown 解析
- nestjs - 如何在服务中导入新的动态模块?
- google-cloud-transcoder - 如何配置 GCloud Transcoder API 模板作业以实际“制作”具有多个音轨的视频?
- mysql - 案件进入的总金额
- javascript - 为什么我在 safari 中得到图像宽度 0?
- linux - linux docker挂载命名空间
- python - SimpleITK 3Deuler 角度旋转体积数据
- python - 从 sqlalchemy 查询结果中获取对象类日期时间