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 json encode datetime类型
Dec 28 Python
python实现学生信息管理系统
Apr 05 Python
Tensorflow使用tfrecord输入数据格式
Jun 19 Python
Python双向循环链表实现方法分析
Jul 30 Python
在PyCharm中实现关闭一个死循环程序的方法
Nov 29 Python
Python 类,property属性(简化属性的操作),@property,property()用法示例
Oct 12 Python
python初步实现word2vec操作
Jun 09 Python
Python 使用双重循环打印图形菱形操作
Aug 09 Python
python两个list[]相加的实现方法
Sep 23 Python
Python3.9新特性详解
Oct 10 Python
python编写函数注意事项总结
Mar 29 Python
分析Python list操作为什么会错误
Nov 17 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
PHP+APACHE实现网址伪静态
2015/02/22 PHP
详解PHP中的mb_detect_encoding函数使用方法
2015/08/18 PHP
PHP命名空间与自动加载类详解
2018/09/04 PHP
关于php unset对json_encode的影响详解
2018/11/14 PHP
js 实现日期灵活格式化的小例子
2013/07/14 Javascript
node.js中的console.time方法使用说明
2014/12/09 Javascript
谷歌浏览器调试JavaScript小技巧
2014/12/29 Javascript
AngualrJS中的Directive制作一个菜单
2016/01/26 Javascript
javascript中FOREACH数组方法使用示例
2016/03/01 Javascript
[原创]JS基于FileSaver.js插件实现文件保存功能示例
2016/12/08 Javascript
详解nodejs 文本操作模块-fs模块(三)
2016/12/22 NodeJs
JavaScript自执行函数和jQuery扩展方法详解
2017/10/27 jQuery
vue 实现移动端键盘搜索事件监听
2019/11/06 Javascript
javascript中contains是否包含功能实现代码(扩展字符、数组、dom)
2020/04/07 Javascript
js实现简单五子棋游戏
2020/05/28 Javascript
用pywin32实现windows模拟鼠标及键盘动作
2014/04/22 Python
一个基于flask的web应用诞生 使用模板引擎和表单插件(2)
2017/04/11 Python
Python切片操作深入详解
2018/07/27 Python
python3实现点餐系统
2019/01/24 Python
安装python及pycharm的教程图解
2019/10/10 Python
Python中logging日志库实例详解
2020/02/19 Python
python有几个版本
2020/06/17 Python
通过canvas转换颜色为RGBA格式及性能问题的解决
2019/11/22 HTML / CSS
Fossil美国官网:Fossil手表、手袋、珠宝及配件
2017/02/01 全球购物
Nike荷兰官方网站:Nike.com (NL)
2018/04/19 全球购物
李维斯牛仔裤英国官方网站:Levi’s英国
2019/10/10 全球购物
业务部经理岗位职责
2014/01/04 职场文书
《月迹》教学反思
2014/02/19 职场文书
函授毕业生自我鉴定范文
2014/03/25 职场文书
民政局标准版离婚协议书
2014/12/01 职场文书
2014年客服工作总结与计划
2014/12/09 职场文书
世界文化遗产导游词
2015/02/13 职场文书
2015年青年志愿者工作总结
2015/05/20 职场文书
2015年依法治校工作总结
2015/07/27 职场文书
民事纠纷协议书
2016/03/23 职场文书
解决MySQL存储时间出现不一致的问题
2021/04/28 MySQL