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里使用正则表达式的全匹配功能
Oct 19 Python
python中virtualenvwrapper安装与使用
May 20 Python
从DataFrame中提取出Series或DataFrame对象的方法
Nov 10 Python
python实现点击按钮修改数据的方法
Jul 17 Python
Python2和3字符编码的区别知识点整理
Aug 08 Python
python 遍历pd.Series的index和value
Nov 26 Python
python3.x 生成3维随机数组实例
Nov 28 Python
pytorch如何冻结某层参数的实现
Jan 10 Python
tensorflow的计算图总结
Jan 12 Python
Django实现celery定时任务过程解析
Apr 21 Python
keras多显卡训练方式
Jun 10 Python
pytorch分类模型绘制混淆矩阵以及可视化详解
Apr 07 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
可快速识别放射性物质-国外大神教你diy一个开放式辐射探测器
2020/03/12 无线电
小偷PHP+Html+缓存
2006/12/20 PHP
php 格式化数字的时候注意数字的范围
2010/04/13 PHP
php daddslashes()和 saddslashes()有哪些区别分析
2012/10/26 PHP
php设计模式小结
2013/02/15 PHP
php 模拟 asp.net webFrom 按钮提交事件实例
2014/10/13 PHP
PHP单例模式与工厂模式详解
2017/08/29 PHP
js中的escape及unescape函数的php实现代码
2007/09/04 Javascript
Firefox和IE兼容性问题及解决方法总结
2013/10/08 Javascript
javascript复制粘贴与clipboardData的使用
2014/10/16 Javascript
JS获取iframe中marginHeight和marginWidth属性的方法
2015/04/01 Javascript
JavaScript将DOM事件处理程序封装为event.js 出现的低级错误问题
2016/08/03 Javascript
jsp 网站引入外部css或者js失效问题解决
2016/10/31 Javascript
详解vue2 $watch要注意的问题
2017/09/08 Javascript
javascript闭包的使用之按钮切换功能
2018/08/30 Javascript
微信小程序使用npm支持踩坑
2018/11/07 Javascript
webpack3里使用uglifyjs压缩js时打包报错的解决
2018/12/13 Javascript
JavaScript创建对象的四种常用模式实例分析
2019/01/11 Javascript
详解json串反转义(消除反斜杠)
2019/08/12 Javascript
深入解析Python中的线程同步方法
2016/06/14 Python
python内置函数:lambda、map、filter简单介绍
2017/11/16 Python
Python实现识别手写数字大纲
2018/01/29 Python
Python基于SMTP协议实现发送邮件功能详解
2018/08/14 Python
python实现给scatter设置颜色渐变条colorbar的方法
2018/12/13 Python
Python中输入和输出(打印)数据实例方法
2019/10/13 Python
Python搭建代理IP池实现接口设置与整体调度
2019/10/27 Python
python如何删除文件、目录
2020/06/23 Python
Python中的特殊方法以及应用详解
2020/09/20 Python
Nike意大利官网:Nike.com IT
2020/01/19 全球购物
员工评语大全
2014/01/19 职场文书
社区敬老月活动实施方案
2014/02/17 职场文书
幼儿园保育员责任书
2014/07/22 职场文书
个人委托书如何写
2014/09/25 职场文书
应聘教师求职信范文
2015/03/20 职场文书
舌尖上的中国观后感
2015/06/02 职场文书
winserver2019安装软件一直卡在应用程序正在为首次使用做准备
2022/06/10 Servers