Python 绘制酷炫的三维图步骤详解


Posted in Python onJuly 12, 2019

通常我们用 Python 绘制的都是二维平面图,但有时也需要绘制三维场景图,比如像下面这样的:

Python 绘制酷炫的三维图步骤详解

这些图怎么做出来呢?今天就来分享下如何一步步绘制出三维矢量(SVG)图。

八面体

我们先以下面这个八面体为例。

Python 绘制酷炫的三维图步骤详解

1 安装相关包

首先安装两个必备包:

import pyrr # NumPy 的 3D 函数库
import svgwrite # svg图形处理库

2 定义 3D 图生成环境

接下来定义几个类设置好 3 维图基础环境:

Python 绘制酷炫的三维图步骤详解

viewport :矩形图范围

camera:包括视图矩阵和投影矩阵

mesh:svg 矢量图所需的网格表面矩阵、着色器和样式字典

3 生成八面体数据

然后生成八面体每个定点的数据:

def octahedron():
  """Construct an eight-sided polyhedron"""
  f = sqrt(2.0) / 2.0
  verts = numpy.float32([ ( 0, -1, 0), (-f, 0, f), ( f, 0, f), ( f, 0, -f), (-f, 0, -f), ( 0, 1, 0) ])
  triangles = numpy.int32([ (0, 2, 1), (0, 3, 2), (0, 4, 3), (0, 1, 4), (5, 1, 2), (5, 2, 3), (5, 3, 4), (5, 4, 1) ])
  return verts[triangles]

4 pyrr 包渲染

接下来利用 pyrr 3维库渲染上面的原始数据,最后生成 svg 矢量图。

Python 绘制酷炫的三维图步骤详解

5 生成 svg

上面最后一步生成 svg 图形,需要调用下面的 Engine 函数,略微有些复杂:

Python 绘制酷炫的三维图步骤详解

以上代码全部封装到类中调用,就可以生成八面体图形。

除了八面体还可以生成很多其他图形。

球体和 Klein 瓶

Python 绘制酷炫的三维图步骤详解

代码如下:

Python 绘制酷炫的三维图步骤详解

多面球体

Python 绘制酷炫的三维图步骤详解

代码如下:

Python 绘制酷炫的三维图步骤详解

发光的球体

Python 绘制酷炫的三维图步骤详解

代码实现:

Python 绘制酷炫的三维图步骤详解

还可以绘制这种曲面体

Python 绘制酷炫的三维图步骤详解

代码实现如下:

Python 绘制酷炫的三维图步骤详解

总结

以上所述是小编给大家介绍的Python 绘制酷炫的三维图,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python判断windows隐藏文件的方法
Mar 21 Python
python类继承用法实例分析
Oct 10 Python
介绍Python中的文档测试模块
Apr 28 Python
Python 中的 else详解
Apr 23 Python
Python格式化输出字符串方法小结【%与format】
Oct 29 Python
Python检查ping终端的方法
Jan 26 Python
python异步实现定时任务和周期任务的方法
Jun 29 Python
PyCharm使用Docker镜像搭建Python开发环境
Dec 26 Python
在Pytorch中计算卷积方法的区别详解(conv2d的区别)
Jan 03 Python
基于python实现计算且附带进度条代码实例
Mar 31 Python
pyqt5 textEdit、lineEdit操作的示例代码
Aug 12 Python
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
Apr 04 Python
Django 接收Post请求数据,并保存到数据库的实现方法
Jul 12 #Python
python实现简单聊天室功能 可以私聊
Jul 12 #Python
pyinstaller参数介绍以及总结详解
Jul 12 #Python
利用Python模拟登录pastebin.com的实现方法
Jul 12 #Python
django之使用celery-把耗时程序放到celery里面执行的方法
Jul 12 #Python
Python3环境安装Scrapy爬虫框架过程及常见错误
Jul 12 #Python
Django中celery执行任务结果的保存方法
Jul 12 #Python
You might like
动态生成gif格式的图像要注意?
2006/10/09 PHP
使用JSON实现数据的跨域传输的php代码
2011/12/20 PHP
超小PHP小马小结(方便查找后门的朋友)
2012/05/05 PHP
解析php利用正则表达式解决采集内容排版的问题
2013/06/20 PHP
php实现加减法验证码代码
2014/02/14 PHP
PHP多维数组转一维数组的简单实现方法
2015/12/23 PHP
DOM 基本方法
2009/07/18 Javascript
node.js中的http.response.getHeader方法使用说明
2014/12/14 Javascript
js实现有时间限制消失的图片方法
2015/02/27 Javascript
基于jquery实现页面滚动时顶部导航显示隐藏
2020/04/20 Javascript
jQuery.form.js插件不能解决连接超时(timeout)的原因分析及解决方法
2016/10/14 Javascript
关于Function中的bind()示例详解
2016/12/02 Javascript
微信小程序 开发经验整理
2017/02/15 Javascript
详解VUE单页应用骨架屏方案
2019/01/17 Javascript
微信小程序HTTP接口请求封装代码实例
2019/09/05 Javascript
Node.js+Vue脚手架环境搭建的方法步骤
2020/03/08 Javascript
详解Vue中的MVVM原理和实现方法
2020/07/15 Javascript
如何手动实现一个 JavaScript 模块执行器
2020/10/16 Javascript
原生js实现弹窗消息动画
2020/11/20 Javascript
python用reduce和map把字符串转为数字的方法
2016/12/19 Python
Python pandas常用函数详解
2018/02/07 Python
Python smtplib实现发送邮件功能
2018/05/22 Python
详解Python安装scrapy的正确姿势
2018/06/26 Python
python引入不同文件夹下的自定义模块方法
2018/10/27 Python
python模块导入的细节详解
2018/12/10 Python
Python整数对象实现原理详解
2019/07/01 Python
Python解析多帧dicom数据详解
2020/01/13 Python
Python3标准库之dbm UNIX键-值数据库问题
2020/03/24 Python
Keras官方中文文档:性能评估Metrices详解
2020/06/15 Python
安装Anaconda3及使用Jupyter的方法
2020/10/27 Python
python向xls写入数据(包括合并,边框,对齐,列宽)
2021/02/02 Python
幼儿园教师国培感言
2014/02/02 职场文书
优秀学生评语大全
2014/04/25 职场文书
2015试用期转正工作总结
2014/12/12 职场文书
2016三八妇女节慰问信
2015/11/30 职场文书
SpringMVC 整合SSM框架详解
2021/08/30 Java/Android