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:
添加回答
舉報