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实现端口转发器的方法
Mar 13 Python
Using Django with GAE Python 后台抓取多个网站的页面全文
Feb 17 Python
详谈pandas中agg函数和apply函数的区别
Apr 20 Python
python写入并获取剪切板内容的实例
May 31 Python
学习python可以干什么
Feb 26 Python
python pytest进阶之conftest.py详解
Jun 27 Python
python 直接赋值和copy的区别详解
Aug 07 Python
浅析Python数字类型和字符串类型的内置方法
Dec 22 Python
python实现猜拳游戏
Mar 04 Python
Python3自定义json逐层解析器代码
May 11 Python
keras 读取多标签图像数据方式
Jun 12 Python
python实现图片,视频人脸识别(opencv版)
Nov 18 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 常用的header头部定义汇总
2015/06/19 PHP
PHP文件缓存smarty模板应用实例分析
2016/02/26 PHP
php封装单文件上传到数据库(路径)
2017/10/15 PHP
详解phpstorm2020最新破解方法
2020/09/17 PHP
javascript 关闭IE6、IE7
2009/06/01 Javascript
Extjs4 消息框去掉关闭按钮(类似Ext.Msg.alert)
2013/04/02 Javascript
jQuery操作checkbox选择(list/table)
2013/04/07 Javascript
jQuery中offsetParent()方法用法实例
2015/01/19 Javascript
js实现下拉框选择要显示图片的方法
2015/02/16 Javascript
cookie的secure属性详解
2015/04/08 Javascript
javascript实现捕捉键盘上按下的键
2015/05/05 Javascript
简介JavaScript中的setHours()方法的使用
2015/06/11 Javascript
浅谈React Native Flexbox布局(小结)
2018/01/08 Javascript
在 vue-cli v3.0 中使用 SCSS/SASS的方法
2018/06/14 Javascript
JS实现点击按钮可实现编辑功能
2018/07/03 Javascript
vue 实现v-for循环回来的数据动态绑定id
2019/11/07 Javascript
element-ui封装一个Table模板组件的示例
2021/01/04 Javascript
[00:47]TI7不朽珍藏III——沙王不朽展示
2017/07/15 DOTA
Python多线程编程(二):启动线程的两种方法
2015/04/05 Python
Python中使用OpenCV库来进行简单的气象学遥感影像计算
2016/02/19 Python
Python读取指定日期邮件的实例
2019/02/01 Python
Python PIL图片添加字体的例子
2019/08/22 Python
python中从for循环延申到推导式的具体使用
2019/11/29 Python
pandas数据处理之绘图的实现
2020/06/15 Python
详解python logging日志传输
2020/07/01 Python
资料员的岗位职责
2013/11/20 职场文书
校园门卫岗位职责
2013/12/09 职场文书
计算机专业毕业生自荐信
2013/12/31 职场文书
个人自我剖析材料
2014/02/07 职场文书
《水上飞机》教学反思
2014/04/10 职场文书
幼儿园父亲节活动总结
2015/02/12 职场文书
幼儿园开学报名通知
2015/07/16 职场文书
李白经典诗之一:全文无一“月”字,却句句有月
2019/07/12 职场文书
导游词之开封禹王台风景区
2019/12/02 职场文书
Oracle11g r2 卸载干净重装的详细教程(亲测有效已重装过)
2021/06/04 Oracle
Python中的matplotlib绘制百分比堆叠柱状图,并为每一个类别设置不同的填充图案
2022/04/20 Python