![SphericalDistribution](images/eps-svg/SphericalDistribution_900.png)
要在单位球面的表面上选取一个随机点,选择来自均匀分布和
的球面坐标
和
是不正确的,因为面积元素
是
的函数,因此以这种方式选取的点将“聚集”在极点附近(如上左图所示)。
可以使用 Wolfram 语言中的函数在单位球面上拾取 个随机点:RandomPoint[Sphere[], n].
为了获得这样的点,使得球面上任何小区域预期包含相同数量的点(如上右图所示),选择 和
作为
上的随机变量。然后
(1)
| |||
(2)
|
给出了均匀分布在 上的点集的球面坐标。这之所以有效,是因为立体角的微分元素由下式给出
(3)
|
极角的分布 可以从下式找到
(4)
|
通过对 求 (2) 的导数得到
,解 (2) 得到
,并将结果代入 (4) 并令
,得到分布
(5)
|
类似地,我们可以选择 均匀分布(因此我们有
),并获得点
(6)
| |||
(7)
| |||
(8)
|
其中 和
,这些点也均匀分布在
上。
Marsaglia (1972) 推导出一个优雅的方法,该方法包括从 上的独立均匀分布中选取
和
,并拒绝满足
的点。从剩余的点中,
(9)
| |||
(10)
| |||
(11)
|
在单位球面的表面上具有均匀分布。此方法也可以扩展到超球面点拾取。上面的图显示了 100、1000 和 5000 个初始点的分布(其中计数指的是丢弃之前的点数)。
Cook (1957) 扩展了 von Neumann (1951) 的方法,给出了一个在单位球面的表面上均匀分布地拾取点的简单方法。从 上的均匀分布中选取四个数字
、
、
和
,并拒绝满足以下条件的点对
(12)
|
(13)
| |||
(14)
| |||
(15)
|
具有所需的分布 (Cook 1957, Marsaglia 1972)。上面的图显示了 100、1000 和 5000 个初始点的分布(其中计数指的是丢弃之前的点数)。
拾取球面上随机点的另一种简单方法是生成三个高斯随机变量 、
和
。然后,向量的分布
(16)
|
在表面 上是均匀的 (Muller 1959, Marsaglia 1972)。