想不到,Python竟能绘制出如此酷炫的三维图

通常用Python绘制二维平面图,有时也需绘制三维场景图。本文分享了如何用Python一步步绘制三维矢量(SVG)图,以八面体为例,介绍了安装相关包、定义3D图生成环境、生成八面体数据、用pyrr包渲染及生成svg的步骤,还提及可绘制球体、Klein瓶等其他图形。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

640?wx_fmt=jpeg


作者 | Jay Alammar

译者 | 高级农民工(ID:Mocun6)


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


640?wx_fmt=png


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


八面体


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

640?wx_fmt=png

1. 安装相关包


首先安装两个必备包:



 


2. 定义 3D 图生成环境


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


640?wx_fmt=png

viewport :矩形图范围

camera:包括视图矩阵和投影矩阵

mesh:svg 矢量图所需的网格表面矩阵、着色器和样式字典

3. 生成八面体数据


然后生成八面体每个定点的数据:



4. pyrr 包渲染


接下来利用 pyrr 3维库渲染上面的原始数据,最后生成 svg 矢量图。


640?wx_fmt=png


5. 生成 svg


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


640?wx_fmt=png


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

640?wx_fmt=png

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


球体和 Klein 瓶

640?wx_fmt=png

代码如下:


640?wx_fmt=png


多面球体

640?wx_fmt=png

代码如下:


640?wx_fmt=png


发光的球体

640?wx_fmt=png

代码实现:


640?wx_fmt=png


还可以绘制这种曲面体

640?wx_fmt=png

代码实现如下:


640?wx_fmt=png


源代码获取地址:https://github.com/prideout/svg3d


作者:Jay Alammar

原文:https://jalammar.github.io/visual-numpy/


(*本文仅代表作者观点,转载请联系原作者)


《程序员大本营》



在本期《程序员大本营》的开篇文章《北邮通信博士万字长文,带你秒懂 4G/5G 区别!》中,前文孙松林教授的学生、北邮通信博士崔原豪,细数移动通信系统演进、5G的新无线技术、毫米波等热门话题,堪称5G入门必看级文章!扫码关注Python大本营,回复:程序员大本营,免费获取。


640?wx_fmt=jpeg

推荐阅读:


640?wx_fmt=png 你点的每个“在看”,我都认真当成了喜欢


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值