2012-01-17 52 views
0

这不是完全包装,因为我可以自己指定矩形大小,我只需要一个打包的结果。 我有相同比例的矩形和不同尺寸
FULL,
HALF(面积= 1/4 * FULL),
四分之一(面积= 1/4 *的一半)。
所有将仅水平放置。 容器的宽度是FULL的3倍,高度将调整为适合矩形。
Javascript包装有很多约束,寻找一个简单的解决方案

将会有150个长方形,从阵列(整个,半个,四分之一)给出随机大小。现在我想把这些矩形放在容器中,这样就没有缝隙。

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

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

在上面的代码我试图限制下一个框的根据本一个选择。
可能我不太清楚,我会再试一次。我有150个箱子,我只想用150个箱子装满箱子,它们应该是大小随机的,一半,四分之一。如果发现造成差距,我们也可以拒绝随机选择的大小并获得另一个大小。

回答

1

我觉得你要么想要不可能的东西,要么就是把它搞错了。如果你真的随意挑选矩形,最终会在容器中留下空隙。

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

如果你的目标是,以填补看似随意的长方形容器,也许下算法为你的作品(peude代码):

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试图把矩形的任何位置在容器随意。

要实现的位置,跟踪该容器的与布尔其指示的2维阵列,如果该点仍是自由的;数组中的每个元素都表示一个小矩形将填充的空间,因此如果容器可以包含12x12的小矩形,那么这将是数组的维数。要检查一个中等长方形是否适合[2,3],你需要检查数组[2,3],[2,4],[3,3]和[3,4]。

放置矩形然后通过定位它们而不是将它们左移。

+0

可能是我不太清楚,我将尝试再次解释。我有150个箱子,我只想用150个箱子装满箱子,它们应该是大小随机的,一半,四分之一。如果发现造成差距,我们也可以拒绝随机选择的大小并获得另一个大小。 – sabithpocker 2012-01-17 09:31:43

+0

我检查了你的算法,但我不认为我需要这么多复杂的“将矩形放在容器中的任何位置”我只是想从左上角填充容器并向旁边和向下传播。 – sabithpocker 2012-01-17 09:42:09

+0

那么我不认为我提出的算法是复杂的,它似乎很适合你的需求:)你认为哪一部分是复杂的?如果你能想出一个更简单的算法,请与我分享 – Wesley 2012-01-17 10:16:11

1

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

解决方案是将画布分成4x4格,然后用矩阵填充每个格子,看似随机,以跟踪空位。

这个例子小提琴解释得很好http://jsfiddle.net/Ua8Cv/

(韦斯利的解决方案应该被标记为答案,我写一个单独的解决方案不仅能够帮助人们来从谷歌这个页面,那么看看他的回答第一次)

相关问题