如何用 sympy 绘制隐式 3D 表面?

How draw implict 3D surface with sympy?

我尝试用sympyx**2 + y**3 = z**2,但我不知道怎么画。

我用了plot3d(x**2 + y**3-z**2),但是一点用都没有,请问有人知道怎么做吗?

遗憾的是,Sympy 不支持 3d 隐式绘图。但是,sage does,虽然我记得它是一个非常重的安装模块。

或者,如果您使用的是 Jupyter Notebook,则可以使用 K3D-Jupyter which is capable of plotting implicit surfaces。让我们看看如何绘制曲面:

import k3d
import numpy as np

r = 5
zmin, zmax = -r, r
xmin, xmax = -r, r
ymin, ymax = -r, r
Nx, Ny, Nz = 100, 100, 100

x = np.linspace(xmin, xmax, Nx, dtype=np.float32)
y = np.linspace(ymin, ymax, Ny, dtype=np.float32)
z = np.linspace(zmin, zmax, Nz, dtype=np.float32)
x, y, z = np.meshgrid(x, y, z, indexing='ij')
p = x**2 + y**3 - z**2

plot = k3d.plot()
plt_iso = k3d.marching_cubes(p, compression_level=9, xmin=xmin, xmax=xmax,
                             ymin=ymin, ymax=ymax,
                             zmin=zmin, zmax=zmax, level=0.0,
                             flat_shading=False)
plot += plt_iso
plot.display()