私は幅36x36インチの高さのタイルのこのフィールドを持っています。
だから私はブロック8x8、6x6、6x8、4x8を持っており、可能な限り90度回転させてフィットさせることができます。私の仕事は、どのブロックをいくつ選択するかを計算するアプリケーションを作成して、すべてが一緒に特定の壁に収まるようにすることです。この例では、36 x36になっています。
注:oppeningは、できるだけ少ないタイルで埋める必要があります。つまり、大きなタイルが優先されます。
タイルの配置にはどのアルゴリズムを使用する必要がありますか?
もう一つの例。フィールド30x 30は、次のように描画されます。
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つの可能な数字しかありません。それ以外の場合、最初のステップは正しく実行されませんでした。次に、次のアクションを実行します。
完了しました。
違いを確認するために、ここに2つの50x50グリッドがあります。
Blue - 8x8
Red - 6x6
Green - 6x8
Gray - 4x8
この最初の例では、合計49個のブロックが得られます。青は32x32の領域(16ブロック)、赤は18x18(9ブロック)、残りは6x8(24ブロック)で埋められています。
この例でも合計49個ですが、8x8ブロックがさらにあります。ここでは、最後の例の16ではなく、24の大きなブロックがあります。現在、4x8ブロックも使用されています。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加