用于查找给定的一组重叠矩形的多边形顶点的算法

时间:2014-09-10 07:29:49

标签: algorithm language-agnostic dirtyrectangle

Algorithm for finding the fewest rectangles to cover a set of rectangles without overlapping

很好的解释,加雷斯。我想弄清楚的是如何实现解决方案的逆转,即如何从矩形集开始并导致多边形。

我的解决方案适用于所有情况,除非两个或多个矩形的部分或整个边缘相互重叠。

如何摆脱构成重叠边缘的点?

1 个答案:

答案 0 :(得分:0)

根据链接的问题,我将假设矩形是轴对齐的,并且它们具有成对不相交的内部。将每个矩形分解为四个线段,顺时针方向。对水平和垂直段重复以下过程。

用y分割水平线段。对于每个y,每个段产生两个事件:尾部的开始事件和头部的停止事件。按x对事件排序(请注意,面向左方的段的停止事件在相应的启动事件之前)。初始化变量sign = 0,然后迭代,在每个开始事件上执行sign += 1,在每个停止时执行sign -= 1。每当sign0转到1时,就会开始一个定向细分,其尾部位于当前扫描位置。每当sign1转到0时,以头部在当前扫描位置结束该段,如果它退化则丢弃它。同样,只要sign0转到-1,就会在当前扫描位置开始一个带有 head 的定向细分。每当sign-1转到0时,在当前扫描位置以结束该段,如果它已退化,则将其丢弃。