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重新引入被覆盖的自带function
Jul 16 Python
Python删除空文件和空文件夹的方法
Jul 14 Python
浅谈python for循环的巧妙运用(迭代、列表生成式)
Sep 26 Python
Python判断两个list是否是父子集关系的实例
May 04 Python
Python实现程序判断季节的代码示例
Jan 28 Python
利用python-pypcap抓取带VLAN标签的数据包方法
Jul 23 Python
django2.2安装错误最全的解决方案(小结)
Sep 24 Python
通过实例解析python描述符原理作用
Jan 22 Python
浅析Django 接收所有文件,前端展示文件(包括视频,文件,图片)ajax请求
Mar 09 Python
python 3.8.3 安装配置图文教程
May 21 Python
OpenCV图片漫画效果的实现示例
Aug 18 Python
Python基础数据类型tuple元组的概念与用法
Aug 02 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的博客ping服务代码
2012/02/04 PHP
ThinkPHP内置jsonRPC的缺陷分析
2014/12/18 PHP
javascript new一个对象的实质
2010/01/07 Javascript
zeroclipboard复制到剪切板的flash
2010/08/04 Javascript
jquery插件之easing 动态菜单
2010/08/21 Javascript
Extjs中通过Tree加载右侧TabPanel具体实现
2013/05/05 Javascript
不同编码的页面表单数据乱码问题解决方法
2015/02/15 Javascript
简介JavaScript中search()方法的使用
2015/06/06 Javascript
Bootstrap实现的经典栅格布局效果实例【附demo源码】
2017/03/30 Javascript
详解AngularJs ui-router 路由的简单介绍
2017/04/26 Javascript
ES6解构赋值的功能与用途实例分析
2017/10/31 Javascript
jQuery中的$是什么意思及 $. 和 $().的区别
2018/04/20 jQuery
Vue中使用create-keyframe-animation与动画钩子完成复杂动画
2019/04/09 Javascript
ES6中let、const的区别及变量的解构赋值操作方法实例分析
2019/10/15 Javascript
JS实现排行榜文字向上滚动轮播效果
2019/11/26 Javascript
Python Tkinter简单布局实例教程
2014/09/03 Python
python实现多线程的方式及多条命令并发执行
2016/06/07 Python
Python进程间通信之共享内存详解
2017/10/30 Python
python3+PyQt5使用数据库窗口视图
2018/04/24 Python
python实现一个简单的ping工具方法
2019/01/31 Python
我就是这样学习Python中的列表
2019/06/02 Python
Pandas透视表(pivot_table)详解
2019/07/22 Python
简单了解django orm中介模型
2019/07/30 Python
Python学习笔记之Django创建第一个数据库模型的方法
2019/08/07 Python
python开根号实例讲解
2020/08/30 Python
ebookers英国:隶属全球最大的在线旅游公司Expedia
2017/12/28 全球购物
澳大利亚家具和家居用品购物网站:Zanui
2018/12/29 全球购物
《草虫的村落》教学反思
2014/02/16 职场文书
社区活动总结报告
2014/05/05 职场文书
住宿生擅自离校检讨书
2014/09/22 职场文书
预备党员介绍人意见
2015/06/01 职场文书
合同范本之电脑出租
2019/08/13 职场文书
2019新学期家长会工作计划
2019/08/21 职场文书
Angular CLI发布路径的配置项浅析
2021/03/29 Javascript
canvas绘制折线路径动画实现
2021/05/12 Javascript
【海涛dota】偶遇拉娜娅 质量局德鲁伊第一视角解说
2022/04/01 DOTA