如何安排N个矩形覆盖最小面积

时间:2013-01-11 03:37:02

标签: algorithm math area rectangles

  

可能重复:
  Algorithm needed for packing rectangles in a fairly optimal way

我有 N 矩形,每个矩形都是随机大小(随机宽度和高度)。所有矩形平行于X& Y轴。我正在寻找一种算法,帮助我并排排列这些矩形,使得生成的边界矩形具有最小面积,并且输入矩形周围/之间的潜在间隙尽可能小。矩形不能旋转,可能不会相互重叠。

(我需要这些来自动化游戏精灵的排列,这样我就可以创建精灵表并从动画师的各种图像中保存精灵位置。)

例如:

+---+   +----------+
| 1 |   |    2     |
+---+   +----------+                 +----------+..           +---+----------+
                                     |    2     |..           | 1 |    2     |
+--------+                ===>       +--------+-+-+    vs     +---+----+-----+
|        |                           |        | 1 |           |        |......
|    3   |                           |    3   +---+           |    3   |......
+--------+                           +--------+....           +--------+......

                                       Unused: 8                 Unused: 18

未使用的空间由图中的点(。)标记。由于第一个结果的边界矩形具有较小的未使用空间,因此最好找到输入矩形的这种排列。

是否有一种算法可以帮助解决这个问题?我做了大量的谷歌搜索,但大多数结果都与找到最小边界矩形或找出N个矩形覆盖预定区域有关。

1 个答案:

答案 0 :(得分:3)

What algorithm can be used for packing rectangles of different sizes into the smallest rectangle possible in a fairly optimal way?建议的解决方案看起来不错,但我会略微改变它:不是贪婪地将边界框扩展到最小区域,而是贪婪地将它扩展到最小区域留出大于区域的空间其余矩形使用。另外,按最大尺寸选择下一个矩形,而不是最大面积。

这应该会在早期为它提供更多空间,并防止它在最后一刻总是耗尽空间并留下大部分空白的空间。