网格中可变大小对象的放置算法

时间:2014-11-06 01:25:26

标签: algorithm grid placement

我正在尝试实施类似于Windows Metro风格的网格系统。我有一个固定大小的2D网格,以及一组放置在其中的对象,每个对象可以有不同的大小(按行和列)。对象不得重叠,如果它们没有按相似的大小分组,那将是理想的。


作为一个简单的例子,给定一个大小为3x3的网格,以及以下项目:

  • 第0项:1行,3列
  • 第1项:2行,1列
  • 第2项:1行,2列
  • 第3项:1行,1列
  • 第4项:1行,1列

一个结果网格可能是

  • 0 1 3
  • 0 1 4
  • 0 2 2

(请注意,它们确实按类似的大小分组,但这是因为它是一个小网格示例。在更大的网格中它应该更加多样化)


我试图编写一些算法,通常遵循首先放置最大项目的概念。但是这非常低效,因为我必须不断地为一个大的2D数组解析自由空间,结果总是很难看(类似大小的项目总是聚集在一起)。

在研究中,我首先发现了树形图算法,但这与那些必须保持其大小的对象无关(它们的大小意味着要适合网格)。背包问题也有些类似,但属于一个维度,而添加第二个问题则是另一个问题。我发现的其他放置算法的约束要少得多。

我想知道是否有人有任何好的参考资料来解决这类问题,甚至想知道从哪里开始确保它既高效又视觉上优雅。

谢谢!

0 个答案:

没有答案