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 相关文章推荐
pycharm 使用心得(七)一些实用功能介绍
Jun 06 Python
python+mysql实现简单的web程序
Sep 11 Python
Python中logging模块的用法实例
Sep 29 Python
在Django中编写模版节点及注册标签的方法
Jul 20 Python
理解python正则表达式
Jan 15 Python
Python3 读、写Excel文件的操作方法
Oct 20 Python
python对视频画框标记后保存的方法
Dec 07 Python
Python实现线性判别分析(LDA)的MATLAB方式
Dec 09 Python
Python通过递归函数输出嵌套列表元素
Oct 15 Python
Django使用django-simple-captcha做验证码的实现示例
Jan 07 Python
Python网络编程之ZeroMQ知识总结
Apr 25 Python
解决IDEA翻译插件Translation报错更新TTK失败不能使用
Apr 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 sprintf() 函数的应用(定义和用法)
2012/06/29 PHP
Laravel中使用阿里云OSS Composer包分享
2015/02/10 PHP
PHP之预定义接口详解
2015/07/29 PHP
PHP实现伪静态方法汇总
2016/01/13 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
PHP智能识别收货地址信息实例
2019/01/05 PHP
Laravel使用Queue队列的技巧汇总
2019/09/02 PHP
ImageFlow可鼠标控制图片滚动
2008/01/30 Javascript
Javascript技巧之不要用for in语句对数组进行遍历
2010/10/20 Javascript
JavaScript 类型的包装对象(Typed Wrappers)
2011/10/27 Javascript
JavaScript将XML转成JSON的方法
2015/03/12 Javascript
$.extend 的一个小问题
2015/06/18 Javascript
jquery获取easyui日期控件的值实现方法
2016/11/09 Javascript
javascript显示系统当前时间代码
2016/12/29 Javascript
AngularJs ng-change事件/指令的用法小结
2017/11/01 Javascript
React Native 真机断点调试+跨域资源加载出错问题的解决方法
2018/01/18 Javascript
JS实现的合并两个有序链表算法示例
2019/02/25 Javascript
Python写的贪吃蛇游戏例子
2014/06/16 Python
Google开源的Python格式化工具YAPF的安装和使用教程
2016/05/31 Python
python实现淘宝秒杀聚划算抢购自动提醒源码
2020/06/23 Python
学生信息管理系统python版
2018/10/17 Python
Scrapy框架爬取西刺代理网免费高匿代理的实现代码
2019/02/22 Python
pandas 数据结构之Series的使用方法
2019/06/21 Python
django 通过url实现简单的权限控制的例子
2019/08/16 Python
vue学习笔记之动态组件和v-once指令简单示例
2020/02/29 Python
django实现更改数据库某个字段以及字段段内数据
2020/03/31 Python
python简单实现插入排序实例代码
2020/12/16 Python
公积金转移接收函
2014/01/11 职场文书
总经理岗位职责范本
2014/02/02 职场文书
数控专业毕业生自荐信范文
2014/03/04 职场文书
党的群众路线教育学习材料
2014/05/12 职场文书
股份转让协议书范本
2015/01/27 职场文书
大足石刻导游词
2015/02/02 职场文书
3招让你摆脱即兴讲话冷场尴尬
2019/08/08 职场文书
Golang标准库syscall详解(什么是系统调用)
2021/05/25 Golang
企业开发CSS命名BEM代码规范实践
2022/02/12 HTML / CSS