5

次の問題を解決する必要があります:サイズの長方形が複数あります:幅の高さ、幅/2の高さ/2、幅/4の高さ/4、幅/8の高さ/8...など

これらの長方形をサイズx*幅y*高さの大きな長方形にパックして、長方形が重ならないようにする必要があります。長方形はパッキング内でランダムに分散され、どの長方形も少なくとも別の長方形に接触する必要があります。かなり基本的な欲張りアルゴリズムを試しましたが、失敗します。

問題を解決する方法についていくつか提案をいただけますか?

ありがとう!

編集:各サイズの長方形を複数持つことができます

これは宿題ではありません。ted.comの効果と同様の効果を作成しようとしています

ランダムとは、制約を満たす長方形のパッキングが複数存在する可能性があることを意味します。アルゴリズムは、実行ごとに同じパッキングを生成するべきではありません。

4

5 に答える 5

4

これは、長方形のパッキング問題のように聞こえます。そこにアルゴリズムへのリンクがあります。そのコードは、長方形を可能な限り密にパックします。長方形をランダムに分散させたいとおっしゃいましたが、これは、1つのサイズのすべての長方形が隣り合っているわけではなく、すべての長方形が広がって大きな長方形を埋めていることを意味していると思います。たぶん、上のリンクのコードは、いくつかのアイデアを得るための良い出発点になるでしょう。

于 2011-09-28T21:12:48.450 に答える
2

空間インデックスまたは四分木を使用して、2次元平面を細分化できます。アイデアは、2次元の問題を1次元の問題に減らすことです。空間インデックス(または空間充填曲線)を取得し、2dを1dに離散化できるようになったら、1dを使用して類似性を検索したり、長さなどで低から高、またはその逆に並べ替えたりできます。この注文を受け取った場合は、インデックスを計算して2D表現に戻し、最も効率的な方法でコンテナーにパックすることができます。空間インデックスを作成する方法はたくさんあります。最高ですが作るのが難しいもののいくつかはヒルベルト曲線です。もう1つは、z曲線またはモートン曲線です。平面を(長方形ではなく)4つの正方形に分割するため、zizag-curveとは異なります。

編集:ここにJqueryプラグインのリンクがあります: http ://www.fbtools.com/jquery/treemap/ ここに世界の人口があります:http ://www.fbtools.com/jquery/treemap/population.html

編集:http://people.csail.mit.edu/konak/papers/socg_2008-circular_partitions_with_applications_to_visualization_and_embeddings.html

編集:http://lip.sourceforge.net/ctreemap.html

于 2011-09-28T21:43:09.953 に答える
1

各ステップで、新しい長方形の表面を4で割ります。

SUM( [0、inf]のnの1/4 n)= 4/3 **

したがって、できる最善の方法は、長方形をサーフェス4/3(高さ*幅)の長方形に合わせるということです。

(それは下限です)

@mloskotアルゴリズムは、表面3/2 *(高さ*幅)の長方形になる可能性のある解決策を提供します。

ここに画像の説明を入力してください

どうすればもっと上手くできるかわかりません。

于 2011-09-28T09:31:43.240 に答える
0

各サイズの長方形が1つしかない場合は、用紙サイズの配置を複製してみることができます。長方形をサイズで最大から最小に並べ替えてから、

  1. 最初の長方形を取り、それをターゲット平面の角に配置します。
  2. 次の長方形を取ります(前の長方形よりも小さいと主張します)
  3. 約90度回転します
  4. そう配置
    • その短いサイズは、最後の大きな隣人の長いサイズに隣接しています
    • その長辺は、ターゲット平面のエッジまたは同じサイズの隣接するエッジのエッジに隣接しています。
  5. 2〜4を繰り返す

説明が不明確かもしれないことを私は理解しているので、ここに解決策を提示する写真があります-それはそれを把握するのに役立つはずです:

ここに画像の説明を入力してください

于 2011-09-28T09:21:04.063 に答える
0

これはMIPマッピングによく似ています

于 2011-09-28T09:51:23.310 に答える