具有隐式定义的卷
x*y*z <= 1
为了
-5 <= x <= 5
-5 <= y <= 5
-5 <= z <= 5
我将如何使用可用的 Python 模块(最好是 mayavi)绘制其外表面?
我知道函数 mlab.mesh,但我不明白它的输入。它需要三个二维数组,我不明白如何创建具有上述信息的数组。
编辑:
也许我的问题在于对 meshgrid() 函数或 numpy 的 mgrid 类的理解不足。我知道我必须以某种方式使用它们,但我并不完全理解它们的目的或这样的网格代表什么。
编辑:
我到了这个:
import numpy as np
from mayavi import mlab
x, y, z = np.ogrid[-5:5:200j, -5:5:200j, -5:5:200j]
s = x*y*z
src = mlab.pipeline.scalar_field(s)
mlab.pipeline.iso_surface(src, contours=[1., ],)
mlab.show()
这会导致一个体积的等值面(对于 x*y*z=1),这并不是我想要的。我正在寻找的基本上是一种绘制任意表面的方法,例如“3d 多边形”(如果有的话)。
我创建了以下代码,它绘制了一个曲面(也适用于 mayavi)。我需要根据我的特定问题修改此代码,但要做到这一点,我需要了解为什么以及如何由三个 2d 数组定义 3d 表面?这些数组(x
和y
)z
代表什么?
import numpy as np
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import axes3d, Axes3D
phi, theta = np.mgrid[0:np.pi:11j, 0:2*np.pi:11j]
x = np.sin(phi) * np.cos(theta)
y = np.sin(phi) * np.sin(theta)
z = np.cos(phi)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_wireframe(x,y,z)
fig.show()