[论文解读] A Simple and Correct Even-Odd Algorithm for the Point-in-Polygon Problem for Complex Polygons
本文提出了一种简单、正确且时间复杂度为 O(n) 的奇偶性算法,用于处理具有自相交边和孔洞的复杂多边形的点在多边形内判定问题。通过使用辅助边来安全处理位于 x 轴上的顶点,并在需要时将射线延伸至整个 x 轴,该算法避免了特殊情况的失败,确保对所有输入都能正确计算奇偶性交点数。
Determining if a point is in a polygon or not is used by a lot of applications in computer graphics, computer games and geoinformatics. Implementing this check is error-prone since there are many special cases to be considered. This holds true in particular for complex polygons whose edges intersect each other creating holes. In this paper we present a simple even-odd algorithm to solve this problem for complex polygons in linear time and prove its correctness for all possible points and polygons. We furthermore provide examples and implementation notes for this algorithm.
研究动机与目标
- 解决在具有自相交边和孔洞的复杂多边形中实现点在多边形内判定时存在的高错误率问题。
- 消除对位于边或顶点上的点进行特殊处理的需要,这类情况通常会导致现有算法失效。
- 提供一个可证明正确的奇偶性算法,适用于所有可能的多边形配置,包括复杂情况。
- 在保持简单性和正确性的同时,确保时间复杂度为 O(n)。
提出的方法
- 该算法从点 Q 沿正 x 轴发射一条射线,并统计与边的交点数量。
- 跳过位于 x 轴上的顶点,并在 x 轴两侧的非共线顶点之间创建辅助边。
- 当跳过位于正 x 轴上的顶点时,将射线延伸至整个 x 轴,以保持交点计数的正确性。
- 算法首先检查点是否与顶点重合或位于边上,若成立则立即返回 '内部'。
- 交点检测使用鲁棒的几何函数,以确定辅助边是否与 x 轴相交。
- 最终判断基于总交点数的奇偶性:奇数个交点表示 '内部',偶数个表示 '外部'。
实验结果
研究问题
- RQ1能否设计一种简单的奇偶性算法,无需特殊处理即可正确处理复杂多边形中所有边界情况?
- RQ2如何安全地处理位于射线(例如 x 轴)上的顶点,以保证交点计数的准确性?
- RQ3是否可能在确保所有类型多边形(包括自相交多边形)正确性的同时,保持 O(n) 的时间复杂度?
- RQ4能否使用辅助边作为原始多边形边的合法替代品进行交点计数,而不会引入错误?
主要发现
- 该算法在所有可能的点和复杂多边形(包括自相交和带孔洞的多边形)上均被证明是正确的。
- 在跳过位于 x 轴上的顶点时使用辅助边,可确保即使原始边不穿过正 x 轴,也能实现准确的交点计数。
- 当跳过正 x 轴上的顶点时,将射线延伸至整个 x 轴,能正确捕获必要的交点,该结论已在 10 种不同的几何构型中得到验证。
- 该算法从设计上避免了特殊检查,消除了现有实现中常见的故障模式。
- 时间复杂度为 O(n),因为在遍历过程中每个顶点仅被访问一次。
- 开源实现验证了该算法的正确性及其在实际应用中的可行性。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。