-1

半径 R が定義された 1 つの球体と、デカルト座標を含む 3 つの要素の配列から始めるとします。

double vecpos[3];
vecpos[0]= 0.0;
vecpos[1]= 0.0;
vecpos[2]= 0.0;
double radius= 5;

ここで、さらに球体を追加したいと思います。これらの追加の球体は、可能な限り高密度に詰め込む必要があります。

この単一の球から始めて、最も密集した方法でさらに球を追加するアルゴリズムを探しています。もちろん、球体は重ならない場合があります (つまり、固体ビー玉のように動作します)。

これまでの私の試みは、より多くの球体を追加することに集中していました (たとえば、元の球体の左右に、次の位置に:

(10,0,0) 
(-10,0,0)

次に、上下に新しいものを追加します(計算された位置:

(5, sqrt(3)/2 * 10, 0)
(-5, sqrt(10)/2 * 10, 0)
(5, sqrt(3)/2 * -10, 0)
(-5, sqrt(3)/2 * -10, 0)

(中心の六角形を作成します)。この時点まで、2 つの球の中心を使用して 3 番目の球を作成する等距離三角形を作成する単純なアルゴリズムを使用して、新しい球を構築し続けることができることを認識しています (これが、4 つの新しい球の位置を計算した方法です)。上の球)。

しかし、3 次元への移行 (つまり、他の球体の上または下に新しい球体を追加すること) で行き詰まってしまいました。

私の問題を解決する提案、または私の解決策よりも簡単な提案は大歓迎です。

ありがとうございました。

4

2 に答える 2

1

これの基礎は、通常のシンプレックスの概念です。。すべての球が同じ半径である場合、それは単により多くの規則的なシンプレックスを生成することの問題です。2Dでは、通常のシンプレックスは正三角形です。3Dでは、正四面体は正四面体です(wikiページに表示されています)。三角形ができたら、三角形の平面の両側に別の点(計算された距離)を作成することで四面体を作成できることに注意してください。したがって、その三角形から2つの四面体を作成できます。この時点で、そのボリュームのすべての三角形の面も正三角形になり、各三角形の面の外側に新しい点を作成することで、これらのそれぞれに新しい四面体を作成します。また、作成されるすべての新しい面でこのプロセスを繰り返すことができます(作成する四面体ごとに3つの新しい面が作成されます)。

于 2012-12-23T19:10:35.333 に答える
1

三角形にこれらの球が 3 つあれば、それらの上に 1 つを積み重ねることができます。新しい球体の x 座標と y 座標は、以下の 3 つの平均になり、追加された高さは 2 sqrt(6)R/3 になります。したがって、下の 3 つが

A = (0, 0, 0)
B = (2R, 0, 0)
C = (R, sqrt(3)R, 0)

それから新しいものは

D = (R, sqrt(3)R/3, 2 sqrt(6)R/3)

2 番目のレイヤーに 1 つの球体を作成したら、上記の方法でそのレイヤーにさらに球体を追加できます。

どの三角形を選択するかを選択できることに注意してください...

于 2012-12-23T18:56:28.153 に答える