【发布时间】:2023-03-19 18:58:02
【问题描述】:
我正在尝试绘制随机分布在球体表面上的点。
根据众多sources(方法10),以下应该生成均匀随机分布的点:
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
N = 2000
r = 3
u = np.random.rand(N)
v = np.random.rand(N)
theta = 2*np.pi*u
phi = np.arccos(2*v-1)
x = r*np.cos(phi)*np.sin(theta)
y = r*np.sin(phi)*np.sin(theta)
z = r*np.cos(theta)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x, y, z)
当我绘制它时,它看起来并不统一。有些角度是这样的:
而其他人看起来像这样:
即使我从网站上运行代码,绘制出来的代码看起来也是错误且不统一的。
【问题讨论】:
-
我认为您正在查看的来源得到了 phi 和 theta 倒退。
-
@Mark;这三个坐标可以互换以用于绘图。
-
@Prune — 这与坐标无关。这是关于将
np.arccos(2*v-1)传递给sin()而不是cos() -
@Mark -- 我明白了:与发布的答案相同的 phi theta 开关。
-
@Prune - 是的,但答案更正确,因为 z 也是错误的。
标签: python numpy matplotlib