Algorithm for finding the fewest rectangles to cover a set of rectangles without overlapping
很好的解释,加雷斯。我想弄清楚的是如何实现解决方案的逆转,即如何从矩形集开始并导致多边形。
我的解决方案适用于所有情况,除非两个或多个矩形的部分或整个边缘相互重叠。
如何摆脱构成重叠边缘的点?
答案 0 :(得分:0)
根据链接的问题,我将假设矩形是轴对齐的,并且它们具有成对不相交的内部。将每个矩形分解为四个线段,顺时针方向。对水平和垂直段重复以下过程。
用y分割水平线段。对于每个y,每个段产生两个事件:尾部的开始事件和头部的停止事件。按x对事件排序(请注意,面向左方的段的停止事件在相应的启动事件之前)。初始化变量sign = 0
,然后迭代,在每个开始事件上执行sign += 1
,在每个停止时执行sign -= 1
。每当sign
从0
转到1
时,就会开始一个定向细分,其尾部位于当前扫描位置。每当sign
从1
转到0
时,以头部在当前扫描位置结束该段,如果它退化则丢弃它。同样,只要sign
从0
转到-1
,就会在当前扫描位置开始一个带有 head 的定向细分。每当sign
从-1
转到0
时,在当前扫描位置以尾结束该段,如果它已退化,则将其丢弃。