我正在寻找/尝试为rectilinear polygon交叉矩形开发最佳算法。我正在测试的多边形没有孔。直线多边形交集
类似here和here的答案适用于非常一般的多边形,并且解决方案的理解相当复杂。
希望S.O.社区可以帮助我记录只有直线多边形的特殊情况的算法。
我找下面充满绿色的图像中的多边形:
我正在寻找/尝试为rectilinear polygon交叉矩形开发最佳算法。我正在测试的多边形没有孔。直线多边形交集
类似here和here的答案适用于非常一般的多边形,并且解决方案的理解相当复杂。
希望S.O.社区可以帮助我记录只有直线多边形的特殊情况的算法。
我找下面充满绿色的图像中的多边形:
书计算几何:通过Preparata的介绍和Shamos对直线多边形的一章。
谢谢。我会看第2章和第8章。我看到我想要的术语是等度多边形。 – jedierikb 2011-05-21 19:32:00
使用扫描线算法,利用直线多边形由其顶点定义的事实。
表示顶点以及它们所属的矩形,即类似(x, y, #rect)
。对于这组点,添加由所有边的交点所产生的点。这些新点的格式为(x, y, final)
,因为我们已经知道它们属于所得到的一组点。
现在:
T
。如果它是来自矩形A的点,并且来自T中的矩形B的点的y坐标(或反之亦然),则将其标记为“最终”。之后删除它和它的相应的起点,被标记为“最终”的所有点表示结果多边形的顶点。
设N是点的总数。进一步假设测试我们是否应该将点标记为“最终”,通过查找T
花费时间O(log(n)),整个算法在O(N * log(N))中。
请注意,查找所有交叉点的任务可以合并到上述算法中,因为通常有效地查找所有交点本身就是一个扫掠线算法。还要注意,得到的一组点可能包含多个多边形,这使得重建“最终”顶点之外的解多边形变得稍微困难。
是直线多边形的边和平行于轴的矩形? – 2011-05-21 19:45:56
@Andre - 是 - 所有行都是平行的 – jedierikb 2011-05-21 19:47:46
作为第一个想法,将直线多边形存储在[segment tree](http://en.wikipedia.org/wiki/Segment_tree)(二维)中我脑海。假设直线多边形是不变的矩形,而且矩形也是变化的。 – 2011-05-21 19:53:57