希望能在球上获得均匀分布, 或者 每两个点之间的间距不小于某个值的N个点的坐标.
点的数量不需要太大, 在100到200之间就够用了.
球的中心点就是坐标系原点.
有看到另外一个大牛写的.
https://www.oschina.net/code/...
但是传入100个点的时候, 相邻很近的点出现几率非常大. 导致在球面上的点上放东西的时候, 就叠在一起了.
求教, 有没有什么其他算法能实现.
阿神2017-04-18 10:27:35
正規分布確率変数を使用して 3 次元ベクトルを生成し、それを単位化するだけで、球上で均一なサンプリングを実現することは難しくありません。
ただし、隣接する点間の要件を満たしているかどうかはわかりません。隣接するポイントが遠く離れていることを確認したい場合は、ジッタリングや層化サンプリングなどのアイデアから学ぶことができます。
リーリー
さらに、保存されたsphere.txtをCloudCompareで開いて点群を表示できます。伊谢尔伦2017-04-18 10:27:35
質問者は球上の点間の距離をできるだけ大きくすることを意味していますが、一様ランダム分布では任意に小さい距離の2点が出現しないとは保証できませんので、この質問は球上のランダム分布とは何の関係もありません(タイトルは騙されすぎます)。
球の一様かつランダムな分布となると長い言葉になります。以前に @lianera によって与えられた魔法のアルゴリズムに困惑しています。なぜ正規分布を使用するのでしょうか?その後、単位化からヒントを垣間見ることができました。単位化とは、実際には体積分布を球体に投影したものです。正規分布は球対称であるため、球面に投影すると均一になる必要があります。言い換えれば、本当に重要なのは分布の球対称性であり、具体的な形状は重要ではありません。 たとえば、円内の領域が一様に分布して投影される場合、円上の一様分布を取得できます。
球状コード
質問者が与えたリンクは、実際には平均的なスタッキング戦略に基づいています。つまり、球を緯度の線で均等に複数の円に分割し、各円を等しい角度に分割しますが、高緯度では円の上の点が少なくなり、低緯度。
最も貴重な質問より良い結果を得るには、さまざまな最適化ツールキットを使用して球点間の最小距離の最大値を見つけることができます。目的関数を球点間の最小距離の形で直接記述すると、関数の安定性が悪く、最適解を見つけることが困難になります。ここで、目的関数はすべての点間隔の二乗の逆和として取得され、最小値が求められます。
これにより、隣接するポイント間の距離が強調表示されるだけでなく、関数が比較的スムーズに保たれます。
Mathematica
が提供する関数を使用します。点が多いと計算に時間がかかります。たとえば、私のマシンで 160 点を計算するには 4 時間かかります。結果の描画:
NMinimize