过度绘制显式和隐式三维图

时间:2018-06-15 00:50:36

标签: python numpy matplotlib plot mayavi.mlab

我想在一个情节中过度绘制两个3D表面。 对于第一个表面,给出的等式是隐含的。

a11*x^2+a22*y^2+a33*z^2+a12*x*y+a14*x+a24*y+a34*z+a44=0

a_n的集合被赋予常量)

对于第二个,给出的等式在球面坐标中是明确的。

R = 14.63*(Pd/2.1)**(-1/6)/(1+(14.63/(10.3+m*Bz)-1)*np.cos(THETA))

PdmBz为常数)

我不是Python的专家所以我只是从互联网上获取了一些代码。 我使用了mayavi 3D meshgrid和第一个的contour和第二个的matplotlib plot_surface。 我的代码是这样的,第一个:

import numpy as np
from mayavi import mlab
mlab.clf()
x, y, z = np.mgrid[-20:20:50j, -20:20:50j, -20:20:50j]
a11,a22,a33,a12,a14,a24,a34,a44=.45,1,.8,.18,46.6,-2.2,-.6,-618
values = a11*x**2+a22*y**2+a33*z**2+a12*x*y+a14*x+a24*y+a34*z+a44
mlab.figure()
mlab.contour3d(x, y, z, values, contours=[0])
mlab.axes()
mlab.show()

(顺便说一下,j在代码中意味着什么?我只是从一些示例3D绘图中获取它并且我了解到j在Python中意味着单位,但在这种情况下它确实似乎不是这样......)

和第二次

import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d.axes3d as axes3d
theta, phi = np.linspace(-np.pi/2, np.pi/2, 40), np.linspace(0, np.pi, 40)
THETA, PHI = np.meshgrid(theta, phi)
Pd,Bz=3.69,-4.20
m=0
R = 14.63*(Pd/2.1)**(-1/6)/(1+(14.63/(10.3+m*Bz)-1)*np.cos(THETA))
X = R * np.sin(PHI) * np.cos(THETA)
Y = R * np.sin(PHI) * np.sin(THETA)
Z = R * np.cos(PHI)
fig = plt.figure()
ax = fig.add_subplot(1,1,1, projection='3d')
plot = ax.plot_surface(
    X, Y, Z, rstride=1, cstride=1, cmap=plt.get_cmap('jet'),
    linewidth=0, antialiased=False, alpha=0.5)
ax.set_xlabel('x')
ax.set_ylabel('y')
plt.show()

它们两者分别很好地工作,但我想要做的是在一个图中绘制两个表面。会不可能?

0 个答案:

没有答案
相关问题