【发布时间】:2011-08-01 11:32:06
【问题描述】:
我正在寻找一种算法,将一个矩形(比如说 1000x800)分割成 n 个(或更多,但尽可能少的额外矩形)在该矩形内大小相等的矩形,因此所有空间都被使用。小矩形也应尽量接近原始纵横比。
例如:
+---------------+
| |
| |
| |
+---------------+
拆分为 n = 2:
+---------------+
| |
+---------------+
| |
+---------------+
拆分为 n = 3
+-------+-------+
| | |
+-------+-------+
| | |
+---------------+
等等
有这样的算法吗?理想情况下,我希望用 Python 编写它,但实际上任何语言都可以,因为我应该能够翻译它......
编辑:
一些额外的信息:
目标表面将是一个浏览器窗口,因此表面将大致为 4:3 或 16:9 或其他流行尺寸。矩形由像素组成。纵横比不保证为整数。
与纵横比限制相比,较少的多余矩形稍微可取。
【问题讨论】:
-
你应该为下一个接受率最接近的矩形选择
min(a, b), max(a, b)/2对。顺便说一句,维度是整数吗? -
您有两个约束条件“尽可能少的额外矩形”和“尽可能接近原始纵横比”——其中哪个更重要? (从 n=3 的示例中,它使用 4 个矩形,可能是第二个。)您如何衡量与原始纵横比的“接近度”?
-
诸如“大致”和“略好”之类的描述不是很有用,除非您可以使其精确。 :-)(例如,对于 n=3,您可以将水平或垂直分割成正好 3 个矩形;确切地说,为什么这不是首选?)
-
嗯,大致是因为我不知道人们会在什么分辨率下使用这个软件。只是因为较少的多余矩形不应该总是胜过纵横比。
-
@ojii:那么它应该在什么时候胜出呢? (无论如何,Gareth 在下面试图适应任意评价函数的答案可能是没有读心术的最佳答案。)