0

四角形のサイズを自分で割り当てることができるため、これは正確にパッキングされているわけではありません。パックされた結果が必要なだけです。私は同じ比率と異なるサイズの長方形を持っています
FULL、
HALF(面積= 1/4 * FULL)、
QUARTER(面積= 1/4 * HALF)。
すべてが水平方向にのみ配置されます。コンテナの幅は FULL の 3 倍で、高さは長方形に合わせて調整されます。

配列(フル、ハーフ、クォーター)からランダムなサイズが与えられる150個の長方形があります。これらの長方形をコンテナーに配置して、隙間がないようにします。

コンテナーと四角形は HTML DIV です。それらをパックするために JavaScript を使用しています。

ここにフィドルがありますhttp://jsfiddle.net/MywQ2/1/

上記のコードでは、現在のボックスに応じて次のボックスの選択を制限しようとしました。
よくわからないかもしれませんが、もう一度説明します。私は 150 個のボックスを持っています。コンテナに 150 個のボックスを入れたいだけです。サイズはフル、ハーフ、クォーターのいずれかでランダムにする必要があります。また、ランダムに選択されたサイズを拒否し、ギャップが生じることが判明した場合は別のサイズを取得することもできます。

4

2 に答える 2

1

Wesley の多大な助けにより、問題に対するまともな解決策を見つけることができました。それはまさに梱包ソリューションではなく、隙間のない一見ランダムに梱包されたボックスを生成するための一種のソリューションです。私には最適化のようなものは必要ありませんでした。

解決策は、キャンバスを 4x4 のグリッドに分割し、それぞれを「一見ランダムに」埋め、マトリックスを使用して空いている位置を追跡することでした。

This example fiddle はそれをよく説明していますhttp://jsfiddle.net/Ua8Cv/

(Wesley の解決策は回答としてマークする必要があります。私は、Google からこのページにアクセスする人々を支援するためだけに別の解決策を書いているので、最初に彼の回答を見てください)

于 2012-01-19T20:41:36.693 に答える
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] の配列を確認する必要があります。

長方形の配置は、長方形を左に浮かせるのではなく、配置することによって行われます。

于 2012-01-17T08:59:53.427 に答える