【问题标题】:Method for randomly generating points on surface of sphere don't look random在球面上随机生成点的方法看起来不随机
【发布时间】: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


【解决方案1】:

您正在查看的源已切换 phi 和 theta。将它们切换回来。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-14
    • 2010-10-30
    • 2016-03-02
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    • 2014-12-05
    相关资源
    最近更新 更多