3

サイズの異なる直方体を並べて、それらの間の接触面積が最大になるように配置しようとしています。

強引なやり方で、私はそれぞれが他の立方体と交差しない空間で立方体に配置される可能性のある位置を探しています。特定のボックスが他のボックスの特定のコレクションと交差するかどうかを確認できるJava 3D のBoundingBoxクラスを使用してこれを実現しました。これで、他のボックスとの接触面積が最も大きい場所を選択する必要がある多くの可能な場所が得られました。

私の問題は、この面積を効率的に計算する方法がわからないことです。少し例を...

ボックス 1: 左下の点 x=0,y=0,z=0; 右上点 x=10,y=10,z=10

ボックス 2: 左下の点 x=10,y=0,z=0; 右上点 x=15,y=5,z=5

ボックス 3 はボックス 1 と同じ寸法であり、接触面積が最大になるように配置する必要があります

この例では、ボックス 3 の片側がボックス 1 の右側 (ボックス 2 がある場所) を除いて一致するすべての位置が最適解です。

誰かがアイデアや解決策を持っていれば、とてもうれしいです。大きすぎなければ、無料のライブラリにも満足しています。

ありがとう!

4

1 に答える 1

1

接触面の潜在的な各ペアを順番に検討します。

ボックス 2 をボックス 1 と接触する任意の場所に配置します。その後、再帰的に検索します。位置ごとに、交差するすべての直方体を特定し、それらの交差する直方体の 1 つとの交差を妨げる上下左右の最小移動を見つけます。これにより、4 つの新しい検索場所が確立されます。次に、これらからもワークアウトします。

明確にするために、左に移動する場合は、交差する直方体の右端の面を見つけて、面が交差しないように移動します。他の立方体はおそらくまだ交差しますが、再帰的にそれらから離れます。

交差点がない場合は、停止場所があり、その領域を書き留めて検索を続けます。

移動によって元のボックスに触れることができなくなった場合、そのルートに沿ってそれ以上探索することはありません。

面ごとに、可能な場所がないか、その面に最大の接触面積を持つ場所が少なくとも 1 つあることがわかります。

次に、他の 5 つの面についてこのプロセスを繰り返します。

于 2011-03-30T00:04:20.413 に答える