通常我们用 Python 绘制的都是二维平面图,但有时也需要绘制三维场景图,比如像下面这样的:

这些图怎么做出来呢?今天就来分享下如何一步步绘制出三维矢量(SVG)图。

八面体

我们先以下面这个八面体为例。

1 安装相关包

首先安装两个必备包:

import pyrr # NumPy 的 3D 函数库

import svgwrite # svg图形处理库

2 定义 3D 图生成环境

接下来定义几个类设置好 3 维图基础环境:

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 矢量图。

5 生成 svg

上面最后一步生成 svg 图形,需要调用下面的 Engine 函数,略微有些复杂:

以上代码全部封装到类中调用,就可以生成八面体图形。

除了八面体还可以生成很多其他图形。

球体和 Klein 瓶

代码如下:

多面球体

代码如下:

发光的球体

代码实现:

还可以绘制这种曲面体

代码实现如下:

总结

以上所述是小编给大家介绍的Python 绘制酷炫的三维图,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

时间: 2019-07-11

python画三维温度散点图-Python 绘制酷炫的三维图步骤详解相关推荐

  1. python画三维散点图-Python 绘制酷炫的三维图步骤详解

    通常我们用 Python 绘制的都是二维平面图,但有时也需要绘制三维场景图,比如像下面这样的: 这些图怎么做出来呢?今天就来分享下如何一步步绘制出三维矢量(SVG)图. 八面体 我们先以下面这个八面体 ...

  2. python画三维平面-Python 绘制酷炫的三维图步骤详解

    通常我们用 Python 绘制的都是二维平面图,但有时也需要绘制三维场景图,比如像下面这样的: 这些图怎么做出来呢?今天就来分享下如何一步步绘制出三维矢量(SVG)图. 八面体 我们先以下面这个八面体 ...

  3. python画三维图-Python 绘制酷炫的三维图步骤详解

    通常我们用 Python 绘制的都是二维平面图,但有时也需要绘制三维场景图,比如像下面这样的: 这些图怎么做出来呢?今天就来分享下如何一步步绘制出三维矢量(SVG)图. 八面体 我们先以下面这个八面体 ...

  4. python画3d图-Python 绘制酷炫的三维图步骤详解

    通常我们用 Python 绘制的都是二维平面图,但有时也需要绘制三维场景图,比如像下面这样的: 这些图怎么做出来呢?今天就来分享下如何一步步绘制出三维矢量(SVG)图. 八面体 我们先以下面这个八面体 ...

  5. python画三维立体图-Python 绘制酷炫的三维图步骤详解

    通常我们用 Python 绘制的都是二维平面图,但有时也需要绘制三维场景图,比如像下面这样的: 这些图怎么做出来呢?今天就来分享下如何一步步绘制出三维矢量(SVG)图. 八面体 我们先以下面这个八面体 ...

  6. python 三维图 背景_Python 绘制酷炫的三维图步骤详解

    通常我们用 Python 绘制的都是二维平面图,但有时也需要绘制三维场景图,比如像下面这样的: 这些图怎么做出来呢?今天就来分享下如何一步步绘制出三维矢量(SVG)图. 八面体 我们先以下面这个八面体 ...

  7. python画漏斗图_python绘制漏斗图步骤详解

    pyecharts中的Funnel函数可以绘制漏斗图,自动根据数据大小生成由大到小自上而下排列的一个漏斗样的图形. 1.导入Funnel模块. from pyecharts import Funnel ...

  8. python抽奖滚动界面_Python使用Tkinter实现转盘抽奖器的步骤详解

    我使用 Python 中的 Tkinter 模块实现了一个简单的滚动抽奖器,接下来继续写一个简单的转盘抽奖器. 滚动抽奖器与点名的场景相似,是从一群人中抽出中奖的人,奖品是提前确定了的,抽奖只是确定中 ...

  9. python跳一跳编程构造_python实现微信跳一跳辅助工具步骤详解

    说明 1.windows上安装安卓模拟器,安卓版本5.1以上 2.模拟器里下载安装最新的微信6.6.1 3.最好使用python2.7,python3的pyhook包有bug,解决比较麻烦 步骤 1. ...

最新文章

  1. GARFIELD@01-18-2005
  2. Sidebar 左右菜单的使用
  3. 【Linux】一步一步学Linux——dig命令(160)
  4. 讨论ALL_ROWS模式和FIRST_ROWS模式
  5. 20171108 模拟题 T1
  6. 1.C#基础学习笔记3---C#字符串(转义符和内存存储无关)
  7. 那年我整理的JavaEE面试题
  8. 大数据系统由哪些核心组件构成
  9. linux rm 命令删除文件恢复_【Linux】恢复误删除的文件或目录
  10. jq ajax渲染数据慢,Jquery Ajax 如何实现延时加载 。即很多网站上面的Loading。。。动态提时候,延时几秒,才显示出服务器的响应数据...
  11. 华为交换之间静态路由配置实例
  12. 如何让微信好友永远拉黑不了你?
  13. 用nmap查看局域网存活的主机
  14. iPhone模拟器截图
  15. 项目 电话号码和E-mail地址提取程序 地实现
  16. 【教程】公众号图文添加Word、Excel、PDF等文件
  17. 服务器灰度部署和原理
  18. 外贸人必备的实用工具
  19. 【PMP】PMP考试易错点总结和答题技巧总结
  20. 影视剧广告植入,对于品牌宣传有怎样的效果?

热门文章

  1. 不同的二叉搜索树-战胜100%的Java用户
  2. 关于Tomcat安装过程中出现的一些问题...
  3. RightScale发布2017年度云调查报告
  4. go swagger
  5. JD AWS vue上传文件
  6. 几种常见的CSS布局
  7. arm920T与arm926的区别[转载]
  8. jQuery版本不同及多次引用问题
  9. struts2中struts.xml的http://struts.apache.org/dtds/struts-2.3.dtd文件路径
  10. mysql decimal(10,2)对应java类型