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操作CouchDB的方法
Oct 08 Python
Python map和reduce函数用法示例
Feb 26 Python
python安装mysql-python简明笔记(ubuntu环境)
Jun 25 Python
Python实现动态图解析、合成与倒放
Jan 18 Python
python使用selenium登录QQ邮箱(附带滑动解锁)
Jan 23 Python
Python去除字符串前后空格的几种方法
Mar 04 Python
python 对字典按照value进行排序的方法
May 09 Python
用django-allauth实现第三方登录的示例代码
Jun 24 Python
python使用 zip 同时迭代多个序列示例
Jul 06 Python
使用Python来做一个屏幕录制工具的操作代码
Jan 18 Python
解决python打开https出现certificate verify failed的问题
Sep 03 Python
能让Python提速超40倍的神器Cython详解
Jun 24 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线性表顺序存储实现代码(增删查改)
2012/02/16 PHP
PHP四大安全策略
2014/03/12 PHP
PHP 快速排序算法详解
2014/11/10 PHP
PHP中对数组的一些常用的增、删、插操作函数总结
2015/11/27 PHP
PHP获取input输入框中的值去数据库比较显示出来
2016/11/16 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
2017/08/29 PHP
php+redis消息队列实现抢购功能
2018/02/08 PHP
document.getElementById为空或不是对象的解决方法
2010/01/24 Javascript
用Javascript评估用户输入密码的强度(Knockout版)
2011/11/30 Javascript
jquery获取焦点和失去焦点事件代码
2013/04/21 Javascript
JS实现的新浪微博大厅文字内容滚动效果代码
2015/11/05 Javascript
原生JavaScript实现异步多文件上传
2015/12/02 Javascript
JS检测页面中哪个HTML标签触发点击事件的方法
2016/06/17 Javascript
requirejs + vue 项目搭建详解
2017/06/16 Javascript
jQuery上传插件webupload使用方法
2017/08/01 jQuery
JavaScript数据类型的存储方法详解
2017/08/25 Javascript
JavaScript实现好看的跟随彩色气泡效果
2020/02/06 Javascript
解决Nuxt使用axios跨域问题
2020/07/06 Javascript
[31:01]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS Orenda
2014/05/23 DOTA
[02:31]2014DOTA2国际邀请赛2009专访:干爹表现出乎意料 看好DK杀回决赛
2014/07/20 DOTA
python 运算符 供重载参考
2009/06/11 Python
Python查询Mysql时返回字典结构的代码
2012/06/18 Python
快速了解Python中的装饰器
2018/01/11 Python
在python中实现强制关闭线程的示例
2019/01/22 Python
Python字符串逆序的实现方法【一题多解】
2019/02/18 Python
Python开发之基于模板匹配的信用卡数字识别功能
2020/01/13 Python
PyCharm GUI界面开发和exe文件生成的实现
2020/03/04 Python
Jupyter notebook 启动闪退问题的解决
2020/04/13 Python
Python模块zipfile原理及使用方法详解
2020/08/04 Python
python re的findall和finditer的区别详解
2020/11/15 Python
Eyeko美国:屡获殊荣的睫毛膏、眼线笔和眉妆
2018/07/05 全球购物
汽车技术服务与营销专业推荐信
2013/11/29 职场文书
国际贸易专业个人求职信范文分享
2013/12/14 职场文书
中学劳技课教师的自我评价
2014/02/05 职场文书
应聘编辑自荐信范文
2014/03/12 职场文书
2015年度优秀员工获奖感言
2015/07/31 职场文书