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使用win32com在百度空间插入html元素示例
Feb 20 Python
使用Python的Tornado框架实现一个Web端图书展示页面
Jul 11 Python
Python 爬虫多线程详解及实例代码
Oct 08 Python
Python分支语句与循环语句应用实例分析
May 07 Python
Python爬虫运用正则表达式的方法和优缺点
Aug 25 Python
Python面向对象之继承原理与用法案例分析
Dec 31 Python
python实现删除列表中某个元素的3种方法
Jan 15 Python
解决Tensorflow 内存泄露问题
Feb 05 Python
TensorFlow2.1.0最新版本安装详细教程
Apr 08 Python
pandas中read_csv、rolling、expanding用法详解
Apr 21 Python
浅谈tensorflow使用张量时的一些注意点tf.concat,tf.reshape,tf.stack
Jun 23 Python
PyCharm+PyQt5+QtDesigner配置详解
Aug 12 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整数取余返回负数的相关解决方法
2014/05/15 PHP
php中smarty变量修饰用法实例分析
2015/06/11 PHP
基于ThinkPHP实现批量删除
2015/12/18 PHP
WordPress中创建用户角色的相关PHP函数使用详解
2015/12/25 PHP
php实现评论回复删除功能
2017/05/23 PHP
PHP+Ajax简单get验证操作示例
2019/03/02 PHP
innerHTML 和 getElementsByName 在IE下面的bug 的解决
2010/04/09 Javascript
jquery 选择器引擎sizzle浅析
2013/02/06 Javascript
jquery下拉select控件操作方法分享(jquery操作select)
2014/03/25 Javascript
JQuery中extend的用法实例分析
2015/02/08 Javascript
jQuery表格插件datatables用法详解
2020/11/23 Javascript
JS基于构造函数实现的菜单滑动显隐效果【测试可用】
2016/06/21 Javascript
arcgis for js 修改infowindow样式的方法
2016/11/02 Javascript
用jQuery实现圆点图片轮播效果
2017/03/19 Javascript
JS 验证密码 不能为空,必须含有数字、字母、特殊字符,长度在8-12位
2017/06/21 Javascript
通过命令行创建vue项目的方法
2017/07/20 Javascript
Angularjs单选框相关的示例代码
2017/08/17 Javascript
详解vue-cil和webpack中本地静态图片的路径问题解决方案
2017/09/27 Javascript
nuxt框架中对vuex进行模块化设置的实现方法
2019/09/06 Javascript
原生javascript单例模式的应用实例分析
2020/02/23 Javascript
javascript设计模式 ? 模板方法模式原理与用法实例分析
2020/04/23 Javascript
[04:04]显微镜下的DOTA2第六期——电影级别的华丽团战
2014/06/20 DOTA
Python实现把类当做字典来访问
2019/12/16 Python
PyQt5连接MySQL及QMYSQL driver not loaded错误解决
2020/04/29 Python
CSS3实现圆角、阴影、透明效果并兼容各大浏览器
2014/08/08 HTML / CSS
浅谈pc和移动端的响应式的使用
2019/01/03 HTML / CSS
JAVA程序员自荐书
2014/01/30 职场文书
英文求职信写作小建议
2014/02/16 职场文书
2014全国两会学习心得体会2000字
2014/03/10 职场文书
骨干教师考核方案
2014/05/09 职场文书
工作失职检讨书(精华篇)
2014/10/15 职场文书
2014年绿化工作总结
2014/12/09 职场文书
2014年教研员工作总结
2014/12/23 职场文书
党建工作目标管理责任书
2015/01/29 职场文书
幼儿园小班教师个人工作总结
2015/02/06 职场文书
MySQL串行化隔离级别(间隙锁实现)
2022/06/16 MySQL