我使用这个算法得到了很好的结果:
编辑:
我提供的链接中描述的算法将给出一个“是”或“否”的答案,关于是否可以将给定的矩形集打包到特定的封闭矩形中.要查找最小的包围矩形,可以重复运行算法.基本上,计算包围矩形的下限和上限,然后进行二分查找以找到落在这些边界内的最小解.我假设封闭的矩形在一个维度上是固定的大小(即,宽度是恒定的,寻找最小长度,反之亦然).如果允许包围矩形的宽度和长度都变化,那么它就更难了,这可能不起作用.
计算下限和上限的简单(但天真)方法如下:
下界 – 最好的情况是所有矩形都可以完美打包而不会浪费任何空间.因此,对所有输入矩形的面积求和,并计算该区域所需的包围矩形长度.
上限 – 最坏的情况是每个矩形必须打包在一个单独的“行”上,因此对于每个输入矩形,计算min(宽度,高度)并求和(即假装输入矩形使用最小值相互堆叠)每个输入的宽度或高度,使得输入的另一个维度不超过包围矩形的宽度).
如果你更努力地工作,你可以显着改善下限和上限以减少搜索空间,但这应该给你起点.