我正在寻找/尝试为rectilinear polygon与矩形交叉开发最佳算法。我正在测试的多边形没有洞。
给出here和here的答案是非常普通的多边形,而且这些解决方案非常复杂。
希望S.O.社区可以帮助我记录具有直线多边形的特殊情况的算法。
我正在寻找下图中填充绿色的多边形:
答案 0 :(得分:2)
Preparata和Shamos的 Computational Geometry:a Introduction 一书有一章关于直线多边形。
答案 1 :(得分:1)
使用扫描线算法,利用直线多边形由其顶点定义的事实。
表示顶点及其所属的矩形,即(x, y, #rect)
之类的东西。对于这组点,添加由所有边的交点产生的点。这些新点的格式为(x, y, final)
,因为我们已经知道它们属于生成的点集。
现在:
T
。如果它是来自矩形A的点和来自T中矩形B的点的y坐标之间(反之亦然),则将其标记为“最终”。之后,标记为“final”的所有点都表示生成的多边形的顶点。
设N为总点数。进一步假设测试我们是否应该将一个点标记为“final”需要时间O(log(n))通过查找T
,整个算法在O(N * log(N))中。
请注意,找到所有交叉点的任务可以合并到上述算法中,因为有效地找到所有交叉点本身通常是扫描线算法。另请注意,生成的点集可能包含多个多边形,这使得从“最终”顶点重建解多边形变得稍微困难。