这里有一点点 NumPy 来制作网格。我认为您想要一个 2D 网格点[i,j],它们以 3D 形式分布。在这种情况下,np.meshgrid() 和 np.mgrid() 可能不如您的网格和空间都是 2D 或都是 3D 时那么方便。
在本例中,您的坐标是 x[i,j]、y[i,j] 和 z[i],因为在本例中它们是作为 z 中的切片生成的。左边是初始球体,右边是拉伸成椭球体。 python 有点冗长,以便更清楚地了解正在发生的事情。
你需要不同的东西吗?
您可以通过在绘图区域内按住并拖动来旋转每个绘图(我的意思是在您的 matplotlib 窗口中,当然不是在这里 - 至少在 Stackexchange 获得 WebGL 之前)。
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
twopi = 2.0 * np.pi
z = np.linspace(-1, 1, 22)[1:-1]
r = np.sqrt(1.0 - z**2)[:,None]
theta = np.linspace(0, twopi, 21)[:-1][None,:]
x = r*np.cos(theta)
y = r*np.sin(theta)
print x.shape, y.shape, z.shape
fig = plt.figure(figsize=[12,6])
ax = fig.add_subplot(1,2,1,projection='3d')
for i in range(20):
ax.plot(x[:,i], y[:,i], z)
ax.plot(x[:,i], y[:,i], z, 'ok')
for i in range(20):
ax.plot(x[i,:], y[i,:], z[i])
ax.set_xlim(-1, 1)
ax.set_ylim(-1, 1)
ax.set_zlim(-1, 1)
ax = fig.add_subplot(1,2,2,projection='3d')
a, b, c = 0.6, 0.3, 1.0
for i in range(20):
ax.plot(a*x[:,i], b*y[:,i], c*z)
for i in range(20):
ax.plot(a*x[i,:], b*y[i,:], c*z[i])
ax.set_xlim(-1, 1)
ax.set_ylim(-1, 1)
ax.set_zlim(-1, 1)
plt.show()