Javascript打包有很多约束,寻找一个简单的解决方案

这不是完全打包,因为我自己可以分配矩形大小,我只需要一个打包结果。 我有相同比例和不同大小的矩形
充分,
半(面积= 1/4 *满),
QUARTER(面积= 1/4 * HALF)。
所有都只能水平放置。 容器的宽度为FULL的3倍,高度将调整为适合矩形。

将有150个矩形,从arrays(全部,一半,四分之一)给出随机大小。 现在我想在容器中排列这些矩形,以便没有间隙。

容器和矩形是HTML DIV。 我正在使用JavaScript来打包它们。

这是一个小提琴http://jsfiddle.net/MywQ2/1/

在上面的代码中,我尝试根据当前的代码约束下一个框的选择。
可能我不清楚,我会再次尝试解释。 我有150个盒子,我只想填充150个盒子的容器,它们应该随机大小,一半,四分之一。 我们也可以拒绝随机选择的尺寸,如果发现产生间隙,则可以获得另一个尺寸。

我想你要么想要一些不可能的东西,要么就是你错了。 如果您选择真正随机的矩形,您的容器中最终会出现间隙。

在示例代码中,您现在可以半随机选择它们,因为它取决于status模数。

如果你的目标是用看似随机的矩形填充容器,也许下一个算法适合你(peude code):

 for rectangle in ['large', 'medium', 'small']: try: place_rectangle_randomly_in_container(rectangle) except NoFreeSpace: if rectangle == 'small': # container filled break 

place_rectangle_randomly_in_container尝试将矩形随机放置在容器中的任何位置。

要实现放置,请使用二维布尔数组跟踪容器,以指示该位置是否仍然空闲; 数组中的每个元素表示一个小矩形将填充的空间,因此如果容器可以包含12×12个小矩形,那么这将是数组的维度。 要检查中等矩形是否适合[2,3],您需要检查[2,3],[2,4],[3,3]和[3,4]的数组。

然后通过定位矩形而不是将它们向左浮动来完成放置矩形。

在韦斯利的大力帮助下,我找到了一个解决问题的好方法。 它确实不是一种包装解决方案,而是一种无间隙地生产看似随机包装的盒子的解决方案。 我不需要优化。

解决方案是将canvas划分为4×4网格,并使用矩阵填充每个网格看似随机,以跟踪空位。

这个例子小提琴很好地解释了它http://jsfiddle.net/Ua8Cv/ 。

(Wesley的解决方案应该标记为答案,我正在编写一个单独的解决方案,只是为了帮助人们从Google访问此页面,所以先看一下他的答案)