python - 双曲面绘图

标签 python matplotlib

我确实看到了这篇文章: 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 值着色,因为我认为这给出了更清晰的图。 enter image description here 或者将 +1 更改为 -1 以获取两页版本的工作表: enter image description here

关于python - 双曲面绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24769716/

相关文章:

python - Matplotlib 子图解包不开心

python - ImageGrid 中的颜色条标签 matplotlib

python - 如何避免 GET 参数中的 + 号被空格替换(Django)?

Python 模块导入名称错误

python - 在 Django Admin 中更新表关系

python - float 分类器

python - 仅当有一个行具有空值时,才向前填充数据框中的一列

python - 添加 seaborn clustermap 以与其他图一起绘制

python - Matplotlib 行高表属性

python - 如何使 x-ticks 更明显?