2011-09-04 72 views
3

我有一个500 x 400px的正方形,里面有100px的网格。现在我想用那个与网格对齐的较小的随机大小的正方形填充该正方形。这意味着较小的正方形可以是100,200,300或400像素的大小。它们的大小和位置必须是随机的,因此每次运行时输出都会有所不同。将网格划分成随机大小的矩形

此图显示了大方形,它的网格,以及可能的输出以及我试图创建的小方块。

Image Test

我用Ruby /西纳特拉与DIV的产生,但我想这个问题是更普遍的趋向实际的算法使用。

有关如何以最少量的代码做到这一点的任何建议?

+0

给出一个正方形,也有数量有限放置它的地方。如果你不担心速度:产生随机平方尺寸达到某个最大值;获取所有可能的地方放置它;随机选择一个并放置它。如果没有可能的地方,请减小最大尺寸。 – Timbits

回答

1

一个简单的递归方法可以产生一个相当不错的随机分布,像这样:作为基本情况,任何100x100的网格都必须填充100x100的正方形。否则,如果网格对于某个n足够小以容纳一个正方形,则可以选择使用该大小的正方形来平铺网格。否则,选择不是100的矩形的一边,挑选一个100的倍数的随机地方,然后将其分成两半,递归地平铺两边。

此方法的主要优点是,您永远不必跟踪放置较旧矩形的位置,以避免击中它们。您始终使用空矩形,并以确保区域永不重叠的方式递归地细分问题。

这可能不总是给出好的结果,但它很容易编码(我假设可能总共有15-25行代码),并且可以很容易地进行调整来改变输出。

希望这会有所帮助!