【问题标题】:Generating an Ellipsoid Grid in python在 python 中生成椭球网格
【发布时间】:2016-01-07 01:07:06
【问题描述】:

我需要对椭球做一些工作,但我不确定如何编写这部分的代码。我需要在椭球区域周围生成一个网格。然后我需要在网格上取点并将它们放入字符串或数组中。最后一部分很好,不确定第一部分。我只是不确定如何创建网格和点。任何提示都会很棒。

【问题讨论】:

  • 什么类型的坐标(笛卡尔[x,y,z],极坐标,圆柱坐标)?什么样的椭球 - 所有三个不同大小的轴/轴随机或平行于您的坐标轴?

标签: python vector 3d grid shape


【解决方案1】:

这里有一点点 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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多