当测试点位于多边形边缘时,多边形算法中的点返回真
Posted
技术标签:
【中文标题】当测试点位于多边形边缘时,多边形算法中的点返回真【英文标题】:Point in polygon algorithm that returns true when the test point is on a polygon edge 【发布时间】:2016-03-04 17:45:52 【问题描述】:我已经实现了基于http://alienryderflex.com/polygon/ 的多边形点算法。
它工作正常,但正如文章中所说:
如果测试点在多边形的边界上,这个算法会产生不可预知的结果
事实证明,当测试点位于多边形的边界/边缘(和顶点)上时,我需要算法返回 true。
有没有:
一种对我有帮助的替代算法;或 一种修改此算法以获得我想要的结果的方法(例如,在运行算法之前稍微扩展多边形)【问题讨论】:
该算法适用于浮点数,因此通常“在边缘”的概念比看起来更棘手。参见例如What Every Computer Scientist Should Know About Floating-Point Arithmetic 和Clas-s-room Examples of Robustness Problems in Geometric Computations。 在任何情况下,您都可以针对您关心的情况进行预检查。 IE。如果该点在多边形边缘的 epsilon 内,则返回 true。如果您的坐标是整数,那么您甚至可以使用 epsilon = 0 来执行此操作。但是即使对于距离为 epsilon 的多边形外部的点,该算法也可能返回 true,因为它可能适用于浮点数 【参考方案1】:稍微扩展多边形是一种选择,但对于凹多边形来说这可能会很棘手。
我的建议是将点向不同的方向(上/下/左/右)移动一小部分,并对每个移动点进行计算。如果确定至少有一个移位点在内部,则将其视为在内部。
另一种选择是让计算交叉点的线沿不同方向延伸,而不仅仅是水平方向。
但这可能不值得花时间,因为正如您链接的文章所述: “这通常不是问题,因为多边形的边缘无论如何都是无限薄的,并且正好落在边缘上的点可以任意移动而不会损害多边形的外观。”
【讨论】:
以上是关于当测试点位于多边形边缘时,多边形算法中的点返回真的主要内容,如果未能解决你的问题,请参考以下文章