12

中心が [C1, C2, C3, C4, ... CD] で、半径が R の D 次元の球体があるとします。今度は、N 個の点を均等に (互いに等距離に) プロットしたいと考えています。球の表面に。それらのポイントが正確にどこにあるかは問題ではありません。それらが互いにほぼ等距離にあるということだけです。これらのポイント P の配列を返す関数が必要です。

function plotter(D, C[1...D], R, N)
{
   //code to generate the equidistant points on the sphere

   return P[1...N][1...D];
}

多くの点を持つ 3 次元球

点数の少ない 3 次元球体

4

3 に答える 3

6

いくつかのオプション:

  • 球上に点をランダムに配置し、ロイド緩和を使用して点を均一に広げます。ボロノイ図を繰り返し計算し、ボロノイ セルの中心に向かって移動します (球で作業する代わりに、ユークリッド ボロノイ図を使用することもできます)。領域に制限されています: CGAL は、たとえばそれを行うことができます。または、私の記事を参照してください)。

  • 大まかな近似で問題ない場合 (つまり、一様ランダム分布で十分である場合)、Wiki で説明されている式: N-Sphereを使用できます。そうでない場合でも、このランダム サンプリングを上記のメソッドの初期化として使用できます。

  • ランダムではあるが等距離サンプルのより良い概念を得るには、ポアソン ディスク分布を生成できます。高次元の高速コードは、Robert Bridson のホームページで入手できます。ただし、球状ドメインに合わせて調整する必要がある場合があります。

于 2012-10-05T01:36:45.380 に答える
1

これがここで言及されているかどうかはわかりません。しかし、他の人が提案したように、球上の均一な分布から点を描くことができます。その後、コロンエネルギーに従って各ポイントをフローします。勾配降下法を使用します。この特定の問題は多くの注目を集めています。以下の論文このウェブサイトをチェックしてください

于 2013-02-19T07:29:00.790 に答える
0

私が考えることができる唯一の方法は、良い結果をもたらすはずです。

  1. 球面上に N 個の点を生成します。高次元でこれを行う通常の方法は、D 次元の正規分布に従ってポイントを生成し、球に正規化することです。これらは等間隔ではないため、ステップ 2 が必要です
  2. 次に、いくつかの反発関数を使用して各ポイントを他のポイントに反発させ、小さな時間ステップを使用して、移動の方向を D 球体に接するように調整します。ポイントを移動し、球に再投影します。ポイントが十分に考慮されるまで、これを続けます。
于 2012-10-03T03:40:35.270 に答える