python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python曲面

通过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曲面内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文