我确实看到了这篇文章: Plotting A Hyperboloid
但是,我并不清楚这个公式是如何转化为这样的:
x = a*np.cosh(u)*np.cos(v)
y = b*np.cosh(u)*np.sin(v)
z = c*np.sinh(u)
我的等式是这样的:
(x**2 + y**2)/a + z**2/b = c
这是在此链接中找到的公式 1:http://arxiv.org/pdf/1211.0980.pdf
我真的很想改变 a、b、c 值,然后看看表面如何变化。 我对 x、y、z 使用的公式是什么,或者如何获得它们?
当我只有这样的方程时:
z = np.sqrt(b*(c**2 - (np.cosh(u)**2)/a))
我在表面中央发现了一堆 Nans。 ;/
谢谢!
最佳答案
您引用的两个表达式对于双曲线都有效,但笛卡尔表达式通常更容易一些(并且隐式方程中存在符号错误)。对于这种情况,坚持你的方程,正确的形式是
(x**2 + y**2)/a - z**2/b = c
圆形双曲面的更标准表达式是
(x**2 + y**2)/a**2 - z**2/b**2 = 1 (or -1 for a two-sheet hyperboloid)
要在 matplotlib 中绘制这些图像,请制作 x 和 y 的网格,然后计算 z,如下所示:
from matplotlib import cm
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.gca(projection='3d')
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
Z = np.sqrt(4.*(X**2 + Y**2)/1. + 1)
xcolors = X - min(X.flat)
xcolors = xcolors/max(xcolors.flat)
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, facecolors=cm.hot(xcolors),
linewidth=1)
plt.show()
这里我用 x 值着色,因为我认为这给出了更清晰的图。 或者将 +1 更改为 -1 以获取两页版本的工作表:
关于python - 双曲面绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24769716/