我需要对椭圆体做一些工作,但我不知道如何编写这部分的代码。我需要围绕椭圆体区域生成网格。然后我需要在网格上取点并将它们放入字符串或数组中。最后一部分很好,不确定第一部分。我只是不确定如何创建网格和点。任何提示都会很棒。
答案 0 :(得分:1)
这是制作网格的NumPy的一点点。我想你想要一个以3D分布的点[i,j]
的2D网格。在这种情况下,np.meshgrid()
和np.mgrid()
可能不像您的网格和空间同时是2D或两者都那么方便。
在此示例中,您的坐标为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()