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脚本来获取Google搜索结果的示例
May 04 Python
python基础知识小结之集合
Nov 25 Python
Python安装Numpy和matplotlib的方法(推荐)
Nov 02 Python
详解TensorFlow在windows上安装与简单示例
Mar 05 Python
Python自然语言处理 NLTK 库用法入门教程【经典】
Jun 26 Python
使用python获取电脑的磁盘信息方法
Nov 01 Python
Python之NumPy(axis=0 与axis=1)区分详解
May 27 Python
Python模块/包/库安装的六种方法及区别
Feb 24 Python
python如何进入交互模式
Jul 06 Python
提高python代码运行效率的一些建议
Sep 29 Python
python FTP编程基础入门
Feb 27 Python
使用pandas或numpy处理数据中的空值(np.isnan()/pd.isnull())
May 14 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 大数据量及海量数据处理算法总结
2011/05/07 PHP
PHP创建桌面快捷方式的实例代码
2014/02/17 PHP
PHP获取数组最大值下标的方法
2015/05/12 PHP
php数组合并与拆分实例分析
2015/06/12 PHP
php远程下载类分享
2016/04/13 PHP
php用户名的密码加密更安全的方法
2019/06/21 PHP
鼠标悬浮显示二级菜单效果的jquery实现
2014/10/29 Javascript
对JavaScript中this指针的新理解分享
2015/01/31 Javascript
使用Raygun来自动追踪AngularJS中的异常
2015/06/23 Javascript
理解和运用JavaScript的闭包机制
2015/08/13 Javascript
ionic隐藏tabs的方法
2016/08/29 Javascript
jQuery实现分页功能(含ajax请求、后台数据、附完整demo)
2017/04/03 jQuery
移动端手指放大缩小插件与js源码
2017/05/22 Javascript
利用Javascript获取选择文本所在的句子详解
2017/12/03 Javascript
详解用async/await来处理异步
2019/08/28 Javascript
使用Vue实现一个树组件的示例
2020/11/06 Javascript
火车票抢票python代码公开揭秘!
2018/03/08 Python
python3+PyQt5实现文档打印功能
2018/04/24 Python
解决pycharm回车之后不能换行或不能缩进的问题
2019/01/16 Python
scrapy-redis的安装部署步骤讲解
2019/02/27 Python
Python使用Slider组件实现调整曲线参数功能示例
2019/09/06 Python
使用matlab或python将txt文件转为excel表格
2019/11/01 Python
python+OpenCV实现图像拼接
2020/03/05 Python
python爬虫开发之PyQuery模块详细使用方法与实例全解
2020/03/09 Python
Python实现查找数据库最接近的数据
2020/06/08 Python
基于CSS3 animation动画属性实现轮播图效果
2017/09/12 HTML / CSS
技校生自我鉴定范文
2013/09/26 职场文书
医生实习工作总结的自我评价
2013/09/27 职场文书
车间操作工岗位职责
2013/12/19 职场文书
奥巴马经典演讲稿
2014/09/13 职场文书
小学生作文批改评语
2014/12/25 职场文书
2014年度个人工作总结范文
2015/03/09 职场文书
师德师风主题教育活动总结
2015/05/07 职场文书
英语专业毕业论文答辩开场白
2015/05/27 职场文书
python 破解加密zip文件的密码
2021/04/22 Python
Go gRPC进阶教程gRPC转换HTTP
2022/06/16 Golang