通过Python绘制九种二次曲面的示例详解

 更新时间:2023年06月14日 09:26:19   作者:微小冷  
这篇文章主要为大家详细介绍了如何通过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曲面内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Django模板语言 Tags使用详解

    Django模板语言 Tags使用详解

    这篇文章主要介绍了Django模板语言 Tags使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • 在脚本中单独使用django的ORM模型详解

    在脚本中单独使用django的ORM模型详解

    这篇文章主要介绍了在脚本中单独使用django的ORM模型详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • Python线上环境使用日志的及配置文件

    Python线上环境使用日志的及配置文件

    这篇文章主要介绍了Python线上环境如何优雅地使用日志,本文通过示例给大家分析对比了与 print 相比 logging 有什么优势,需要的朋友可以参考下
    2019-07-07
  • Python如何将list中的string转换为int

    Python如何将list中的string转换为int

    这篇文章主要介绍了Python如何将list中的string转换为int,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • Python轻量级搜索工具Whoosh的使用教程

    Python轻量级搜索工具Whoosh的使用教程

    本文将为大家简单介绍一下Python中的一个轻量级搜索工具Whoosh,并给出相应的使用示例代码,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-07-07
  • 基于django和dropzone.js实现上传文件

    基于django和dropzone.js实现上传文件

    这篇文章主要介绍了基于django和dropzone.js实现上传文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • 基于python cut和qcut的用法及区别详解

    基于python cut和qcut的用法及区别详解

    今天小编就为大家分享一篇基于python cut和qcut的用法及区别详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • 小白如何入门Python? 制作一个网站为例

    小白如何入门Python? 制作一个网站为例

    以制作一个网站为例,聊一聊小白如何入门Python,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • Python Poetrya项目依赖管理安装使用详解

    Python Poetrya项目依赖管理安装使用详解

    这篇文章主要为大家介绍了Python Poetrya项目依赖管理安装使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • python与字符编码问题

    python与字符编码问题

    这篇文章主要介绍了python与字符编码问题,下面对编码问题做个简单的总结,感兴趣的朋友跟随小编一起看看吧
    2019-05-05

最新评论