通过Python绘制九种二次曲面的示例详解
作者:微小冷
这篇文章主要为大家详细介绍了如何通过Python绘制九种二次曲面,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以跟随小编一起了解一下
二次曲面
python中绘制三维图需要将坐标系声明为3d
。
球面方程为
x2+y2+z2=R2
写为极坐标形式为
x=Rsinθcosφ
y=Rsinθsinφ
z=Rcosθ
令R = 1 R=1R=1,则画图为
代码如下
>>> import matplotlib.pyplot as plt >>> import numpy as np >>> theta = np.arange(0,6.4,0.1).reshape(64,1) >>> phi = np.arange(0,3.2,0.1).reshape(1,32) >>> x = np.sin(theta)*np.cos(phi) >>> y = np.sin(theta)*np.sin(phi) >>> z = np.cos(theta) >>> ax = plt.gca(projection='3d') >>> ax.plot_surface(x,y,z) <mpl_toolkits.mplot3d.art3d.Poly3DCollection object at 0x000001CECF13A730> >>> plt.show()
二次曲面共有九种,代码均与椭球曲面类似,为了加强立体感,可在画图的时候设置颜色映射,下列各图部分用到
from matplotlib import cm #... ax.plot_surface(x,y,z,cmap=cm.coolwarm)
a,b,c均为1时的曲面
1.椭圆锥面 x2/a2+y2/b2-z2/c2=0
2.椭球面 x2/a2+y2/b2+z2/c2=1
3.单叶双曲面 x2/a2+y2/b2-z2/c2=1
4.双叶双曲面 x2/a2+y2/b2-z2/c2=-1
5.椭圆抛物面 z=x2/a2+y2/b2
6.双曲抛物面 z=x2/a2-y2/b2
7.椭圆柱面 x2/a2+y2/b2=1
8.双曲柱面 x2/a2-y2/b2=1
9.抛物柱面 y2=2px
在上面各式中,椭圆锥面、单叶双曲面、双叶双曲面具有极为相似的表达式
故可绘制动态图来表示这一过程,由于animation中无法绘制plot_surface
,所以采用将单张图片生成gif的方式。
import numpy as np import matplotlib.pyplot as plt from matplotlib import cm import imageio theta = np.arange(0,6.4,0.1) z = np.arange(-2,2,0.02).reshape(200,1) gifImgs = [] fig = plt.figure() for i in np.arange(-1,1,0.02): theta = np.arange(0,6.4,0.1).reshape(1,64) Z = np.repeat(z,64).reshape(200,64) x = np.sqrt(z**2+i)*np.cos(theta) y = np.sqrt(z**2+i)*np.sin(theta) ax = plt.gca(projection='3d') ax.plot_surface(x,y,Z,cmap=cm.coolwarm) plt.savefig("%.2f.jpg" % i) gifImgs.append(imageio.imread("%.2f.jpg" % i)) imageio.mimsave("test.gif",gifImgs,fps=5)
到此这篇关于通过Python绘制九种二次曲面的示例详解的文章就介绍到这了,更多相关Python曲面内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!