#我想生成三维球体簇,其中包含许多点。 我正在使用此代码,但无法生成
import math
N = 50
thetavec = np.linspace(0,pi,N)
phivec = np.linspace(0,2*pi,2*N)
[th, ph] = np.meshgrid(thetavec,phivec)
R = np.ones(th.shape)
x = R*numpy.sin(th)*numpy.cos(ph)
y = R*numpy.sin(th)*numpy.sin(ph)
z = R*numpy.cos(th)
ax = plt.axes(projection='3d')
ax.plot_surface(x, y, z, cmap='viridis', edgecolor='none')
ax.set_title('sphere')
我已经从matlab生成了这些球形簇,但现在我想从python生成:
在这段代码之后,我得到了球体上的点,但我希望这些点位于球体内部,如第1幅图所示,这意味着构建球形集群的点的数量
帮帮我
问题1:您正在使用
math.sin
和math.cos
,它们期望数字,但您正在给它们数组(th
和ph
)。使用numpy.sin
和numpy.cos
问题2:我认为你误解了spherical coordinates的工作原理。在球坐标中,我们有
R
、theta
和phi
,其中R
是点到原点的距离。 使用R = 1
时,可以在半径为1的球体上获得点。要在球体内获取点,必须使用小于1的半径。例如,如果要在半径为1的球体内创建10个同心球体,请使用linspace
定义一个rvec
并将其添加到meshgrid
中,如下所示:或者,如果不需要同心圆,而只需要球体内部的随机点,可以使用
numpy.random.rand
使用随机数。与numpy.ones
不同,numpy.random.rand
需要数组的形状作为单独的参数,而不是单个元组,因此我们使用*th.shape
解压th.shape
元组相关问题 更多 >
编程相关推荐