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使用cStringIO实现临时内存文件访问的方法
Mar 26 Python
Python基于identicon库创建类似Github上用的头像功能
Sep 25 Python
python画出三角形外接圆和内切圆的方法
Jan 25 Python
Python交互环境下实现输入代码
Jun 22 Python
Python实现数据可视化看如何监控你的爬虫状态【推荐】
Aug 10 Python
python中bs4.BeautifulSoup的基本用法
Jul 27 Python
DJango的创建和使用详解(默认数据库sqlite3)
Nov 18 Python
在Python中预先初始化列表内容和长度的实现
Nov 28 Python
python实现文法左递归的消除方法
May 22 Python
Python接收手机短信的代码整理
Aug 02 Python
python speech模块的使用方法
Sep 09 Python
Django实现简单的分页功能
Feb 22 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中file_exists函数使用详解
2015/05/08 PHP
Apply an AutoFormat to an Excel Spreadsheet
2007/06/12 Javascript
两种简单实现菜单高亮显示的JS类代码
2010/06/27 Javascript
javascript 学习笔记(onchange等)
2010/11/14 Javascript
基于IE下ul li 互相嵌套时的bug,排查,解决过程以及心得介绍
2013/05/07 Javascript
引入JS文件IE6报语法错误或缺少对象问题的解决方法
2014/01/09 Javascript
jQuery中before()方法用法实例
2014/12/25 Javascript
JavaScript数值千分位格式化的两种简单实现方法
2016/08/01 Javascript
AngularJS表格详解及示例代码
2016/08/17 Javascript
网络传输协议(http协议)
2016/11/18 Javascript
Vue使用vue-cli创建项目
2017/09/01 Javascript
Three.js基础学习之场景对象
2017/09/27 Javascript
ES6扩展运算符用法实例分析
2017/10/31 Javascript
react-router browserHistory刷新页面404问题解决方法
2017/12/29 Javascript
JS中Map和ForEach的区别
2018/02/05 Javascript
JQueryDOM之样式操作
2019/03/27 jQuery
详解webpack4.x之搭建前端开发环境
2019/03/28 Javascript
基于three.js实现的3D粒子动效实例代码
2019/04/09 Javascript
layui动态渲染生成左侧3级菜单的方法(根据后台返回数据)
2019/09/23 Javascript
Javascript模拟实现new原理解析
2020/03/03 Javascript
Vue中通过属性绑定为元素绑定style行内样式的实例代码
2020/04/30 Javascript
vue 基于abstract 路由模式 实现页面内嵌的示例代码
2020/12/14 Vue.js
Python 文件和输入输出小结
2013/10/09 Python
Python ValueError: invalid literal for int() with base 10 实用解决方法
2015/06/21 Python
python pip源配置,pip配置文件存放位置的方法
2019/07/12 Python
解决安装pyqt5之后无法打开spyder的问题
2019/12/13 Python
python except异常处理之后不退出,解决异常继续执行的实现
2020/04/25 Python
python 图像增强算法实现详解
2021/01/24 Python
HTML5在微信内置浏览器下右上角菜单的调整字体导致页面显示错乱的问题
2021/01/19 HTML / CSS
法学专业应届生求职信
2013/10/16 职场文书
班组长岗位职责范本
2014/01/05 职场文书
便利店投资创业计划书
2014/02/08 职场文书
家长学校实施方案
2014/03/15 职场文书
夏季药店促销方案
2014/08/22 职场文书
高中升旗仪式演讲稿
2014/09/09 职场文书
十大动画制作软件,Adobe产品上榜两款,第一是行业标准软件
2022/03/18 杂记