タイル配置アルゴリズム

ウラド

私は幅36x36インチの高さのタイルのこのフィールドを持っています。

36 x 36

だから私はブロック8x8、6x6、6x8、4x8を持っており、可能な限り90度回転させてフィットさせることができます。私の仕事は、どのブロックをいくつ選択するかを計算するアプリケーションを作成して、すべてが一緒に特定の壁に収まるようにすることです。この例では、36 x36になっています。

注:oppeningは、できるだけ少ないタイルで埋める必要があります。つまり、大きなタイルが優先されます。

タイルの配置にはどのアルゴリズムを使用する必要がありますか?

もう一つの例。フィールド30x 30は、次のように描画されます。

30 x 30

50 x 50

50 x 50

ジオビット

amitが一般的なケースの答えを出したので、これを具体的にします。これらの4つのブロックサイズで、それが可能であると仮定すると(次元は偶数で、> = 6など)、半欲張りアルゴリズムを使用できます。

最初の目的は、8x8ブロックの数を最大化することです。そのためには6、各方向に必要なサイズブロ​​ックの数を把握する必要があります。次元ごとに、8で割り切れることを確認します。割り切れない場合は、6を引きます。割り切れるまで繰り返します(3回以上試行しないでください)。

何度もかかったとしても、その次元で6x6ブロックが必要になる可能性があります。それらから長方形を形成し、それを一隅に置きます。8x8ブロックから別の長方形を形成し、反対側の角に配置します。これらの2つの長方形の角が接触している必要があります。

これで、反対側の角に2つの長方形の形で、おそらく残りのスペースができました。それぞれの1つの次元は8で割り切れ、もう1つは6で割り切れることがわかっています。ここでの簡単な方法は、適切に回転した6x8ブロックで埋めることですが、large(8x8)の最大数を保証するものではありません。ブロック。たとえば、50x50の場合、18x32の長方形が2つ残っています。それぞれ12個の6x8タイルでそれらを埋めることができます。あなたもすることができない12個のブロックごとよりも優れていますが、できるそこに多くの8×8ブロックに収まります。

それが問題ではない場合は、完了です(やったー)。この方法のボーナスは、4x8ブロックを使用する必要がないことです。


8x8ブロックを最大化たい場合は、別の手順を実行する必要があります。ここでは、8が簡単なので、6で割り切れる次元に集中しています。必要になる可能性のあるすべてのサイズ(8x8,6x8,4x8)が完全にスタックします。

反対側では、6、12、18の3つの可能な数字しかありません。それ以外の場合、最初のステップは正しく実行されませんでした。次に、次のアクションを実行します。

  • 6の場合、6x8の行を追加します(最適化なし)
  • 12の場合、4x8の行と8x8の行を追加します
  • 18の場合、4x8の行、6x8の行、8x8の行を追加します

完了しました。


違いを確認するために、ここに2つの50x50グリッドがあります。

Blue  - 8x8
Red   - 6x6
Green - 6x8
Gray  - 4x8

基本

この最初の例では、合計49個のブロックが得られます。青は32x32の領域(16ブロック)、赤は18x18(9ブロック)、残りは6x8(24ブロック)で埋められています。

より良い

この例でも合計49個ですが、8x8ブロックがさらにあります。ここでは、最後の例の16ではなく、24の大きなブロックがあります。現在、4x8ブロックも使用されています。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

TensorFlow配置アルゴリズム

分類Dev

タイルマージアルゴリズム2048ゲーム

分類Dev

カスタムテトリスブロック配置アルゴリズム

分類Dev

パーセンタイルアルゴリズム

分類Dev

アルゴリズムのランタイム

分類Dev

選択アルゴリズムランタイム

分類Dev

このアルゴリズムのBigOランタイム?

分類Dev

動的タイムワーピング(DTW)アルゴリズム

分類Dev

Pythonボタンアルゴリズム

分類Dev

Pythonボタンアルゴリズム

分類Dev

タウ番号アルゴリズム

分類Dev

マップタイリングアルゴリズム

分類Dev

2ポインタアルゴリズム

分類Dev

インタビューのアルゴリズム

分類Dev

再帰的アルゴリズムとポインタの問題

分類Dev

不明なアルゴリズムタイプ:word2vec

分類Dev

PythonNegamaxアルゴリズム

分類Dev

QuickSortLomutoアルゴリズム

分類Dev

DistinctCountアルゴリズム

分類Dev

Pythonrfftアルゴリズム

分類Dev

アルゴリズム分析

分類Dev

乱数アルゴリズム

分類Dev

univeristyタイムテーブルの遺伝的アルゴリズム

分類Dev

ゲームのタイル塗りつぶしアルゴリズム

分類Dev

A *アルゴリズム8パズル

分類Dev

リバーシブルハッシュタイプアルゴリズム?

分類Dev

動的アルゴリズムの問題でタイムアウト

分類Dev

MyersdiffアルゴリズムとHunt–McIlroyアルゴリズム

分類Dev

Javaでの効率的な配置アルゴリズム