python画三维立体图难吗_万万没想到,Python竟能绘制出如此酷炫的三维图

10dfa9ec8a136327e1d1a518a05b85e908fac732.jpeg?token=4dd02b3598fa9bd21f66c5c6ac9111b6&s=FDC0CB194E66700B9A1884C2030060B5

作者 | Jay Alammar转载自 | 高级农民工

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

0b46f21fbe096b63aef8fcd63ee7a241e9f8aca8.jpeg?token=2a5893f37dcc4a418a56146a90a2c4a0&s=7FA834634D6645224A5DF5CA0000B0B1

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

八面体

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

d439b6003af33a8781809587f688353d5143b593.jpeg?token=9957d311b759fe22c306d296edff3197&s=5AAC3C62FBABC4CC1C5591CA0000E0B1

1 安装相关包

首先安装两个必备包:

import pyrr # NumPy 的 3D 函数库import svgwrite # svg图形处理库

2 定义 3D 图生成环境

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

7dd98d1001e93901c7e0f8bc4a3871e234d196af.jpeg?token=88d214042ec4d2de6fecf87a74a1244e&s=B680974A5FA5B25B0EE10C0F000070C2

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

4a36acaf2edda3ccf5e317c6313d1c04203f922e.jpeg?token=5066d75da9b1971436cb0fc20747a9ee&s=B69017C85BACB649144D4C0E0200F0C0

5 生成 svg

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

5bafa40f4bfbfbed234809774424d233aec31ff9.jpeg?token=a7e866ed9b2a6393f0858a877e4a6145&s=B6B855C85AF7B25F425D65020000E0C2

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

d439b6003af33a8781809587f688353d5143b593.jpeg?token=9957d311b759fe22c306d296edff3197&s=5AAC3C62FBABC4CC1C5591CA0000E0B1

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

球体和 Klein 瓶

42166d224f4a20a466aacc8ba086bd27730ed01b.jpeg?token=dbac4c6a9a8be5372e916efbccae5e68&s=3EAA7023139175DE0BF4D5CA0100C0B1

代码如下:

342ac65c10385343d40f6fffa2c7957bc8808801.jpeg?token=9222cfec3f6873fffef9bc1cb1976750&s=B69057CA53BC966C4A6D640F0000E0C2

多面球体

6a600c338744ebf83ae9878be92df22f6259a7c7.jpeg?token=a5a18f8166197d3a0015af64fbb3aae3&s=CD22A452B102D2ED100770530300C0E8

代码如下:

810a19d8bc3eb135467f61fc97ca8dd6fc1f4412.jpeg?token=2ff5ff70e2a0094edc5772bd593d4ac7&s=BE9015C853ACB54D5E51400B0200A0C2

发光的球体

b64543a98226cffccfb7534488d56f95f403ea85.jpeg?token=3a766fcf5a14acb521e31055832f96b8&s=09E4E6063F5352C4886B367B0300C07C

代码实现:

63d9f2d3572c11df76bd799752f347d5f603c274.jpeg?token=366d93be017ecb100d964e1028f49586&s=BED017C84BE49C495CE1280B0300E0C2

还可以绘制这种曲面体

9e3df8dcd100baa1ce561ee677c49c17c9fc2e49.jpeg?token=636ec6e22176c02ff2f07f88021ef55e&s=4B95C7023F7767845B72B351030030F9

代码实现如下:

b2de9c82d158ccbf7a56bd25280c993bb035411b.jpeg?token=e47ccf79b1c76aa0981823480a729d90&s=B69877C8DFE0B168485C840E0000E0C3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/506369.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php人物行走,非常震撼的纯CSS3人物行走动画

今天分享给大家的是一个用纯CSS3实现的人物行走动画,在没有使用JavaScript的情况下,用CSS3技术将人物行走的姿态描绘得非常逼真。其实动画实现的原理也是比较简单的,将人物行走时的状态分割成多张图片,然后利用CSS3的动画属性将这…

php jquery 弹窗提示框,jQuery实现消息弹出框效果

本文实例为大家分享了jQuery消息弹出框的具体代码,供大家参考,具体内容如下效果图实现代码.showMessage {padding: 5px 10px;border-radius: 5px;position: fixed;top: 45%;left: 45%;color: #ffffff;}.showMessageSuccess {background-color: #00B7EE;}…

python定义字符串数组_python数组声明

广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 如何在python? 我无法在文档中找到对数组的任何引用... 我正在制作一个小程序,在静态数组上保存…

python函数定义中参数列表里的参数是_python函数定义中的参数说明

原博文 2020-05-23 07:50 − > 描述函数定义时 涉及到的 位置参数,默认参数,关键字参数,可变参数等的概念及用法 ## 1 示例代码#! /usr/bin/env python # -*- coding: UTF-8 -*- import logging def get_default_logger(): log... 相关推荐…

我的世界手机有PHP的开服器下载,【BDS】MC基岩版官方开服器Windows版插件开发包...

您尚未登录,立即登录享受更好的浏览体验!您需要 登录 才可以下载或查看,没有帐号?注册(register)xMC基岩版官方开服器Windows版插件开发教程2019年5月22日 作者:Player前言:MC基岩版官方开服器(BDS)自发布至…

c++ 协程_用yield实现协程

上一篇 理解python中的yield关键字 介绍了使用yeld实现生成器函数,这一篇我们来继续深入的了解一下yield,用yield实现协程。先来解答一下上一篇留下的问题:下面的代码为什么第二次调用next打印None呢?def 事实是这样的&#xff0c…

pandas 第一行_用Excel表格带你学习pandas最核心的处理操作,不再害怕条件统计

此系列文章收录在公众号中:数据大宇宙 > 数据处理 >E-pd转发本文并私信我"python",即可获得Python资料以及更多系列文章(持续更新的)经常听别人说 Python 在数据领域有多厉害,结果学了很长时间,连数据处理都麻烦得…

网页载入动画 php,网站页面加载动画代码

有时候网站服务器带宽不好或者用户网络不好,网站速度打开就会比较慢,那么用户等待就会比较无聊,下面准备了一个loading页面,可以在网站文件未完全加载完毕之前展示。HTML部分,放在body标签下面(最好是最靠近body)正在加…

ehcache缓存原理_贼厉害,手撸的 SpringBoot缓存系统,性能杠杠的!

缓存是最直接有效提升系统性能的手段之一。个人认为用好用对缓存是优秀程序员的必备基本素质。本文结合实际开发经验,从简单概念原理和代码入手,一步一步搭建一个简单的二级缓存系统。一、通用缓存接口1、缓存基础算法FIFO(First In First Ou…

angular 字符串转换成数字_Angular日期在TypeScript中格式化转换应用

组件模板中我们常常使用Angular内置管道DatePipe将其日期格式化,如同{{ startTime | date:yyyy-MM-dd }}这般操作,即可转换为字符串格式。那么在TS文件中我们也可以通过DatePipe或formatDate方法将其格式化。Angular日期在TypeScript中格式化转换应用​w…

python罗马数字转换,Python3.5实现的罗马数字转换成整数功能示例

本文实例讲述了Python3.5实现的罗马数字转换成整数功能。分享给大家供大家参考,具体如下:问题概述:给定一个罗马数字 ,将罗马数字转换成整数。如罗马数字I,II,III,IV,V分别代表数字 …

js在一个指定元素前添加内容_WebAR开发指南(1)---使用AR.js实现第一个WebAR demo...

前面有一篇文章万字干货介绍WebAR的实现与应用 分析了目前流行的WebAR框架并简单的介绍一些实现方法,这个专栏我们具体的来通过一些框架实现WebAR效果。关于AR.jsAR.js是一个轻量级的增强现实类JavaScript库,支持基于标记和位置的增强现实。开发人员可以…

python 最小二乘回归 高斯核_从简单数学建模开始:08最小二乘准则的应用(附python代码)...

模型拟合一般来说有这么三种:切比雪夫近似准则极小化绝对偏差之和最小二乘准则这几个原则各有各的适用范围。其中最小二乘准则是比较容易计算的。接下来我将简要的介绍最小二乘准则以及举例说明如何用python实现。最小二乘准则定义:给定某种函数类型 和 …

oracle 时间集合,oracle 日期函数集合(集中版本)第2/2页

oracle 日期函数集合(集中版本)第2/2页更新时间:2009年06月16日 23:45:55 作者:oracle 日期函数网上已经有了不少,特我们跟集中一下,免得大家麻烦。一、 常用日期数据格式1.Y或YY或YYY 年的最后一位,两位或三位SQL&g…

中缀表达式转后缀表达式两位数_再见,正则表达式!

从一段指定的字符串中,取得期望的数据,正常人都会想到正则表达式吧?写过正则表达式的人都知道,正则表达式入门不难,写起来也容易。但是正则表达式几乎没有可读性可言,维护起来,真的会让人抓狂&a…

php 腾讯云 文字识别_腾讯科技(成都)有限公司

成都IT内推圈是由IT行业老兵组建的民间组织,我们希望能为广大IT同仁提供力所能及的帮助,我们不仅提供靠谱的职位,我们更是有温度的圈子!为了帮助更多的朋友寻找到靠谱的内推职位,老农在此号召大家:1. 发布职…

oracle插入性能优化,Oracle- insert性能优化

看见朋友导入数据,花了很长时间都没完成!其实有很多快速的方法,整理下!向表中插入数据有很多办法,但是方法不同,性能差别很大.----1.原始语句drop table t1 purge;create table t1(sid number,sname varchar2(20)) tab…

winscp 自动断开无法连接_winscp教程,winscp教程,看完就学会的winscp教程

作为一个站长,当你的网站流量逐渐变大时,就会发现目前的主机无法满足正常需要,就要更换更高一级的云主机或VPS主机,新手就需要使用WinSCP和Putty,来管理主机。IIS7服务器管理工具可以批量管理、定时上传下载、同步操作…

oracle客户端数据恢复,AnyBackup-Oracle 数据恢复任务恢复到异客户端失败,并提示错误:数据源为空,请检查恢复环境是否授权...

关键字Oracle、数据源适用产品AnyBackup Express 7.0.6 - 7.0.8AnyBackup CDM 7.0.6 - 7.0.8问题描述登录 AnyBackup 管理控制台,依次点击定时数据保护 > 数据恢复 > 新建,新建 Oracle 数据恢复任务,选择恢复数据到异客户端&#xff0c…

linux祖先进程,Linux下的几种特殊进程

1、Linux的登录环境Linux是一个多任务多用户的操作系统,其设计初衷: 就是要达成多用户同时使用单个计算机大的任务。多用户:早期计算机资源紧张,为了让更多的人都可以使用。多任务:服务于多用户,同时提高计算机的吞吐量…