楼主: CDA网校
1615 0

[其他] 万万没想到!Python 竟能绘制出如此酷炫的三维图——CDA人工智能学院 [推广有奖]

管理员

已卖:189份资源

泰斗

4%

还不是VIP/贵宾

-

威望
3
论坛币
125437 个
通用积分
11881.4040
学术水平
278 点
热心指数
286 点
信用等级
253 点
经验
231591 点
帖子
7075
精华
19
在线时间
4407 小时
注册时间
2019-9-13
最后登录
2026-2-13

初级热心勋章

楼主
CDA网校 学生认证  发表于 2020-6-24 12:32:17 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

CDA人工智能学院:数据科学、人工智能从业者的在线学院。

数据科学(Python/R/Julia)数据分析、机器学习、深度学习

作者 | Jay Alammar
译者 | 高级农民工

通常我们用 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 瓶



代码如下:



多面球体



代码如下:



发光的球体



代码实现:



还可以绘制这种曲面体



代码实现如下:


微信图片_20200423130629.jpg


关注“AIU人工智能实验室”,回复“录播”获取更多人工智能精选直播视频!



完 谢谢观看


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:python 万万没想到 人工智能 三维图 没想到

已有 1 人评分经验 收起 理由
cheetahfly + 100 精彩帖子

总评分: 经验 + 100   查看全部评分

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-2-13 15:38