18

各ポイントの「周囲」が「同じ」領域になるように、球上に n 個のポイントを分散させようとしています。基本的に、n 点で評価し、各面積要素が同じ (かつ 4pi r^2/n に等しい) と仮定して、関数を球面上で統合しようとしています。

私の質問はこれに非常に関連していますが、「受け入れられた」回答に示されているコードが希望どおりに機能することに同意できないようです(R = 1000、nx = ny = 40を選択して生成された添付の写真を参照)。明らかに、私のポイントは極にはるかに集中しており、赤道に沿って非常に集中していません.

助言がありますか?

編集: 参考までに、各ポイントがその周りに等しい「面積」を持つようにメッシュを生成するソフトウェアをいくつか見つけました (下にスクロールして、球体上の均一な面積分布を確認してください) が、それらのコードを実装するのではなく、以下を使用しました-時間のかかるアプローチ: 単純に方位角と極角 ([0,2pi] と [0,pi]) を反復処理し、各パッチの「無限小」領域を計算しました (da = r^2 sin theta dtheta dphi)。これは基本的に、球体全体の統合に必要なすべてです。均一な領域の分散を実装するのがそれほど難しくないことを望んでいました.

4

4 に答える 4

11

背景情報:

球には 4 つの pi ステラジアンがあります。これは球の合計「度」ですが、ステラジアンは円の通常のラジアンとは大きく異なるため、私はこの用語を相対的な意味でのみ使用します。1 つは、それらは 3 次元であり、したがってしっかりしています。それらを球体のアイスクリームの形をした角度と考えてください。 ここに画像の説明を入力

http://en.wikipedia.org/wiki/Steradianは、それらの優れた例を提供しています。

円のラジアンのように、半径と直接関係があります。1 ステラジアン = 半径の 2 乗の 1 単位。

そのため、まず、球体にプロットする必要があるアイテムの数を見つけます。その数を とするnsr= ステラジアン (測定単位) = r^2(半径の二乗)

4 pi / n sr = x

x各ポイントに割り当てられるステラジアンの数です。

4点としましょう。

4 pi / 4 sr = x

pi sr = x したがって、各ポイントは の割り当てられたスペースを取得しpi srます。

これを考慮してください...点をプロットしているので、各点は割り当てられたスペースの中央に配置されると考えます...つまり、円錐形の領域の中央に配置されますsr。ここで、少し考えてみる必要があります。領域を完全に円で埋めることは可能ですか? まじで考えてみろよ… じゃないよね?塗りつぶされた円は、特定の場所で常に間にスペースを残します。ちょっとサッカーボールを考えてみてください。均一な分布を提供するために一緒に来ることができる形状から構築されています。この考え方のポイントは、円に半径があるように、すべての点が正確に特定の距離だけ離れているわけではないことを理解してもらうことです。しかし、サッカー ボールの正方形の中心は非常に近く、均一です。

私があなただったら、サッカー ボールのように、割り当てられた球状空間の「チャンク」のそれぞれを配置するための最も効率的な「形状」を特定するアルゴリズムを作成しようとするでしょう。そうでなければ、これがあなたが得ようとしている最良の答えかもしれないと思います... 4 pi / n sr = x... 、各ポイントをプロットする方法がないため、互いにまったく同じ距離です(特定の構成を除いて、つまり特別な数のポイントで可能です)、すべての特別なケースを見つけるためのアルゴリズムがそこにあるかもしれません.

私はこの回答を編集して特殊なケースについて詳しく説明しています。ここで少し余分な情報があれば良いと思います。ポイントが等距離にある特殊なケースは、プラトン立体の頂点を形成する可能性があることです。基本的な正立体は 5 つしかなく、他のすべての立体はこれらで作られています。

詳細と証明については、このページをお読み ください https://www.uwgb.edu/dutchs/symmetry/platonic.htm

今では信用できません。簡単な調査を行ったところ、同様の投稿が見つかりました https://math.stackexchange.com/questions/279544/return-an-array-of-evenly-distributed-points-on-a-半径と原点を与える球

オイラーの多面体公式の使用 http://plus.maths.org/content/eulers-polyhedron-formula

多面体には「三角形、正方形、六角形」の 3 つの基本的な形状しか存在しないという事実から、プロットする点の数を最も近い多面体形状に丸め、それぞれを均等にプロットするアルゴリズムを作成できます。

ここに画像の説明を入力

ああ、この素晴らしい記事を見てください。ステラジアンと 3 次元の「度数」について、私よりもずっとよく説明しています

于 2013-02-11T07:33:50.410 に答える
5

以下は、Python で作成したばかりのアルゴリズムの例です。

from numpy import random, cos, sin, sqrt, pi
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt

def rand_sphere(n):
  """n points distributed evenly on the surface of a unit sphere""" 
  z = 2 * random.rand(n) - 1   # uniform in -1, 1
  t = 2 * pi * random.rand(n)   # uniform in 0, 2*pi
  x = sqrt(1 - z**2) * cos(t)
  y = sqrt(1 - z**2) * sin(t)
  return x, y, z

x, y, z = rand_sphere(200)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x, y, z)
plt.show()

ここに画像の説明を入力

再び10000ポイントで:

ここに画像の説明を入力

于 2013-02-11T04:04:21.973 に答える
2

間違っているかもしれませんが、もし

  1. I(a,b) = (ab) / (|ab|)^3 として 2 点間の相互作用をセットアップします。a,b は 3D 空間のベクトルとして脅かされます。
  2. 最初の反復では、通常どおりポイントを配置します(等角度距離で、ウィムの投稿でどのように言及されているか)
  3. アルゴリズムの各ステップで、(1 から) I の合計の勾配に逆らって各ポイントを移動します。ここで、I は直接の隣人でのみ計算されます。
  4. 各点の勾配が 0 になるまで 3 を繰り返します。

アルゴリズムは、必要な構成に収束します。時間はかかりますが、さまざまな数のポイントの結果をキャッシュできます。

于 2013-02-11T08:35:38.673 に答える