绘制双曲面

3 投票
1 回答
3865 浏览
提问于 2025-04-17 05:56

老师在课堂上给了这个公式

w = x**2 + y**2 - z**2

并展示了下面的3D图形。请问我该如何使用Matplotlib来绘制这个图形(不包括交叉的平面)?我想首先需要选择一个具体的w值,比如10,否则就无法进行3D绘图了。然后,我是不是应该因为公式中的z**2而转换成极坐标?我试过这样做,但失败了。任何帮助都会很感激。另外,这个形状有名字吗?

enter image description here

1 个回答

3

明白了。在这里找到了一些不错的资料,按照里面的公式,我写了下面的Python代码。

http://msenux.redwoods.edu/Math4Textbook/Plotting/ParametricSurfaces.pdf

from __future__ import division

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure(figsize=plt.figaspect(1))  # Square figure
ax = fig.add_subplot(111, projection='3d')

r=1;
u=np.linspace(-2,2,200);
v=np.linspace(0,2*np.pi,60);
[u,v]=np.meshgrid(u,v);

a = 1
b = 1
c = 1

x = a*np.cosh(u)*np.cos(v)
y = b*np.cosh(u)*np.sin(v)
z = c*np.sinh(u)

ax.plot_surface(x, y, z,  rstride=4, cstride=4, color='b')

plt.show()

撰写回答