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之print详解
Sep 28 Python
基于python内置函数与匿名函数详解
Jan 09 Python
使用Python监控文件内容变化代码实例
Jun 04 Python
django反向解析和正向解析的方式
Jun 05 Python
Python查找文件中包含中文的行方法
Dec 19 Python
nohup后台启动Python脚本,log不刷新的解决方法
Jan 14 Python
解决项目pycharm能运行,在终端却无法运行的问题
Jan 19 Python
python中aioysql(异步操作MySQL)的方法
Apr 11 Python
python中使用ctypes调用so传参设置遇到的问题及解决方法
Jun 19 Python
手动安装python3.6的操作过程详解
Jan 13 Python
Python3.7将普通图片(png)转换为SVG图片格式(网站logo图标)动起来
Apr 21 Python
Python使用Excel将数据写入多个sheet
May 16 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
function.inc.php超越php
2006/12/09 PHP
PHP实现生成透明背景的PNG缩略图函数分享
2014/07/08 PHP
在html文件中也可以执行php语句的方法
2015/04/09 PHP
PHP导出Excel实例讲解
2016/01/24 PHP
php 实现进制相互转换
2016/04/07 PHP
javascript中的变量是传值还是传址的?
2010/04/19 Javascript
JS维吉尼亚密码算法实现代码
2010/11/09 Javascript
js判断鼠标同时离开两个div的思路及代码
2013/05/31 Javascript
JS实现文字向下滚动完整实例
2015/02/06 Javascript
简单实现限制uploadify上传个数
2015/11/16 Javascript
JS版微信6.0分享接口用法分析
2016/10/13 Javascript
JavaScript中数组的各种操作的总结(必看篇)
2017/02/13 Javascript
jQuery日期范围选择器附源码下载
2017/05/23 jQuery
小程序开发基础之view视图容器
2018/08/21 Javascript
JavaScript实现的拼图算法分析
2019/02/13 Javascript
[00:32]2018DOTA2亚洲邀请赛iG出场
2018/04/03 DOTA
python读写文件操作示例程序
2013/12/02 Python
简单说明Python中的装饰器的用法
2015/04/24 Python
PYTHON压平嵌套列表的简单实现
2016/06/08 Python
python的多重继承的理解
2017/08/06 Python
使用matplotlib画散点图的方法
2018/05/25 Python
Python多线程编程之多线程加锁操作示例
2018/09/06 Python
python numpy 按行归一化的实例
2019/01/21 Python
如何在Django中添加没有微秒的 DateTimeField 属性详解
2019/01/30 Python
Python编写打字训练小程序
2019/09/26 Python
利用pandas合并多个excel的方法示例
2019/10/10 Python
python读取mysql数据绘制条形图
2020/03/25 Python
numpy库reshape用法详解
2020/04/19 Python
Python爬虫定时计划任务的几种常见方法(推荐)
2021/01/15 Python
董事长助理岗位职责
2014/02/18 职场文书
行政办公室岗位职责
2014/03/18 职场文书
党员活动日总结
2014/05/05 职场文书
企业领导班子四风对照检查材料
2014/09/27 职场文书
学习心理学的体会
2014/11/07 职场文书
2015年小学辅导员工作总结
2015/05/27 职场文书
观后感格式
2015/06/19 职场文书