1 回答

TA贡献1895条经验 获得超3个赞
当你通过球面坐标变换点并且角度 theta 接近 pi 时,作为 [0,2pi]x{theta} 图像的圆变得越来越小。由于 theta 是均匀分布的,所以靠近极点的点会更多。它可以在网格图像上看到。
如果你想在球体上生成均匀分布的点,你可以利用这样一个事实:如果你用两个平行平面切割一个球体,平面之间的球面条带的面积仅取决于平面之间的距离。因此,您可以使用两个均匀分布的随机变量在球体上获得均匀分布:
-r 和 r 之间的 z 坐标,
对应于经度的 [0, 2pi) 之间的角度 theta。
然后你可以很容易地计算出 x 和 y 坐标。
示例代码:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
r = 1
n = 1000
z = np.random.random(n)*2*r - r
phi = np.random.random(n)*2*np.pi
x = np.sqrt(1 - z**2)*np.cos(phi)
y = np.sqrt(1 - z**2)*np.sin(phi)
fig = plt.figure(figsize=(8, 8))
ax = plt.axes(projection='3d')
ax.scatter(x, y, z)
plt.show()
结果n=100,250,1000:
添加回答
举报