によって暗黙的に定義されたボリュームを持つ
x*y*z <= 1
為に
-5 <= x <= 5
-5 <= y <= 5
-5 <= z <= 5
利用可能なPythonモジュール、できればmayaviを使用して、その外面をプロットするにはどうすればよいですか?
関数 mlab.mesh は知っていますが、その入力がわかりません。3 つの 2D 配列が必要ですが、上記の情報を使用して作成する方法がわかりません。
編集:
たぶん、私の問題は、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 でも動作します)。このコードを特定の問題に合わせて変更する必要がありますが、そのためには、3D サーフェスが 3 つの 2D 配列によって定義される理由と方法を理解する必要があります。これらの配列 ( 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()