【发布时间】:2014-03-10 20:42:23
【问题描述】:
我知道这里有很多与我的问题相关的问题,但我仍然感到困惑。而且我是计算几何的新手,任何建议都会有所帮助。
问题:一组n矩形,其边平行于x或y轴,并且每个矩形具有相同的长度和高度;每个矩形的四个角点坐标已知,设计一个O(nlogn)时间的分治算法计算所有矩形的并集,并集表示这些矩形覆盖的合并区域。
这些矩形可能是不相交的、接触的或重叠的,它们有数千个。输出可以是任何形状(结果可能内部是空心的,如洋葱圈),边界由一组点坐标定义。当我将它们分成两半时,我正在努力合并这两个子部分。 (我知道如何使用扫描线/扫描平面方法计算联合面积,但不知道如何使用 DaC。)
例子:
【问题讨论】:
-
如果每个子输出都已排序,则扫描线合并将是 O(n)。
-
什么是联合形状?比如说,第一个矩形是 ( (0,0), (0,1), (1,0), (1,1) ),第二个是 ( (2,1), (2,2), (3,1 ), (3,2) )。如果我们取 min x, min y, max x, max y,会是理想的联合吗? ( (0,0), (0,2), (3,0), (3,2) )。然后只需找到最小值和最大值,它将是 O(n)。
-
@DavidEisenstat 我正在考虑通过递归绘制虚拟垂直线来将矩形的所有左下角分成两半,直到垂直线左侧只有一个矩形,但还没有想出了如何合并左侧和右侧区域
-
@Alex union 表示这些矩形覆盖的所有区域,留出空白,可以参考示例图片
标签: algorithm union computational-geometry rectangles divide-and-conquer