程序员和数学 + 艺术的距离,只有几百行代码而已。

2018-07-13 09:46:50 +08:00
 mathzhaoliang

原谅我用了一个公众号风格的标题。

读过三体的朋友,可能还能回忆起,刘慈欣在死神永生中对四维空间碎片有这样的描述:

首次从四维空间看三维世界的人,首先领悟到一点:以前身处三维世界时,他其实根本没看见过自己的世界,如果把三维世界也比做一张画,他看到的只是那张画与他的脸平面垂直放置时的样子,看到的只是画的侧面,一条线;只有从四维看,画才对他平放了。他会这样描述:任何东內都不可能挡住它后面的东西,任何封闭体的内部也都是能看到的。这只是一个简单独规则,但如果世界真按这个规则呈现,视觉上是极其震撼的。当所有的遮档和封闭都不存在,一切都暴露在外时,目击者首先面对的是相当于三维世界中亿万倍的信息量,对于涌进视觉的海量信息,大脑一时无法把握。

...

这时.他们不得不面对一个全新的视觉现象:无限细节。在三维世界里,人类的视觉面对的是有限细节,一个环境或事物不管多么复杂,呈现的细节是有限的,只要用足够的时间依次观看,总能把绝大部分细节尽收眼底。但从四维看三维时,由于三维事物在各个层次上都暴露在四维视野中,原来封闭和被遮挡的一切都平行并列出来。比如一个封闭容器,首先可以看到它内部的物体,而这些内部物体的内部也是可见的,在这无穷层次的暴露并列中,便显露出无限的细节。在莫沃维奇和关一帆面前的飞船,虽然一切都显露在眼前,但任何一个小范围内的一件小东西,比如一只水杯或一支笔,它们并列出来的细节也是无限的,枧觉也接收到无限的信息,用眼睛看时,穷尽一生也不可能看全它们在四维空间的外形。当一个物体在所有层次上都暴露在四维时,便产生了一种令人眩晕的深度感,像一个无限嵌套的俄罗斯套娃,这时,“从果核中看到无穷”不再是一 个比喻。

看到这一段的时候,我想大家都会好奇,当我们真正的身处四维空间的时候,看到的景象是什么样子的

很抱歉,没有人知道答案,因为没有人能够进入四维空间。但是我们可以把四维空间中的物体投影到三维空间中,然后看看它的投影的结果是什么样子的。

下图是一个例子:(注意:无限细节!!!

上面这四个图其实绘制的都是四维空间中的一个正多面体 120-cell 的各种截断的变体,真正的 120-cell 长这样:

它是一个四维空间中的正多面体的意思是:它有 600 个顶点,1200 条边,720 个面,120 个胞腔,所有这些顶点,边,面,胞腔在四维空间中全都一样。

当然在上面的图中显示的结果是有的边 /面大,有的小,这是因为在投影到三维空间的过程中发生了形变。这没有办法,毕竟不存在从四维空间到三维空间的保距离的投影,任何投影都会导致形变。


这些图片都是由我刚刚完成的一个新项目生成的,代码在 github:

https://github.com/neozhaoliang/pywonderland

这个程序可以绘制的多面体很多,比如:

1.所有的柏拉图和阿基米德多面体:

2.各种三维和四维空间中的棱柱 /反棱柱:

昨晚主要是灵光一现,渲染了几个新图,觉得不错,所以拿上来臭美一下~,骗骗 star ~。


这个子项目是怎么来的呢?我最初受到了一个非常精彩的数学视频的启发:维度 (这个是简体中文的链接),我第一次看这个视频的时候还是 08/09 年那会,甚是羡慕,但是那时太菜,完全不了解里面的数学,也不知道人家是怎么渲染的。现在博士都毕业了,也有了一些编程经历,这才琢磨明白里面的道道,可以做出与之媲美的效果了。大家可以移步

http://pywonderland.com/polytopes/

那个网页上有我用这个程序制作的小视频。我相信效果是不会让大家失望的。

这个代码只有几百行,用纯 python 计算好坐标以后导出到 POV-Ray 渲染,只用到 numpy 这个库,sage/sympy/mathematica 统统不需要。你看,不需要什么高深的工具,纯 python + 一个渲染器就可以做出媲美 Devianart 级别的艺术作来,而且这个作品背后的数学也很奇妙:我这里是根据每个多面体对应的 Coxeter-Dynkin 图,算出其对称群,然后把这个群作用在任意一个初始顶点上得到整个多面体。这跟网上那些把多面体数据事先存在一个文件里面的方式是不同的。

数学很奇妙,数学和编程的交集不只有机器学习,纯数学在编程的世界中也可以很奇妙。希望大家喜欢 pywonderland 这个项目。

6798 次点击
所在节点    分享创造
32 条回复
bwangel
2018-07-13 10:22:11 +08:00
666,老哥很厉害啊!
mathzhaoliang
2018-07-13 10:31:17 +08:00
@bwangel 喜欢 + 花时间而已。
Devilker
2018-07-13 10:44:27 +08:00
想起区块链了
mathzhaoliang
2018-07-13 10:53:52 +08:00
@Devilker 那里面的数学主要是椭圆曲线公钥密码学 + 哈希算法。椭圆曲线是数学里面非常优美深刻的分支。唯一的隐忧是:一旦真正实现了量子计算,椭圆曲线密码学就会被淘汰。
coffeSlider
2018-07-13 10:57:35 +08:00
有一个很像星战中的飞行器。
cskeleton
2018-07-13 11:01:02 +08:00
让我想起了《维度 数学漫步》和《混沌 数学探秘》
mathzhaoliang
2018-07-13 11:01:56 +08:00
@cskeleton 就是受《维度》的启发写的。
mathzhaoliang
2018-07-13 11:03:09 +08:00
@cskeleton 我写这个项目的时候发邮件问过《维度》的作者之一 Jos Leys,他说他就是用 POV-Ray 渲染的。但是怎么计算的不知道。
zhuanzh
2018-07-13 11:06:02 +08:00
https://www.bilibili.com/video/av20203833
推荐下木鱼的《维度 数学漫步》解说
fenx
2018-07-13 11:09:54 +08:00
mathzhaoliang
2018-07-13 11:16:17 +08:00
@fenx 我不认为那些作品可以和我这个项目里的媲美~ 主要是那些作品只是简单的几何图形,并没有多少复杂的数学支撑。
mayne95
2018-07-13 11:23:18 +08:00
结构美,赞!
mathzhaoliang
2018-07-13 11:27:17 +08:00
@mayne95 这只是开胃菜,后面还有更多更神奇的!
mayne95
2018-07-13 11:28:13 +08:00
@mathzhaoliang 期待,满眼星星.jpg
mathzhaoliang
2018-07-13 11:32:20 +08:00
@mayne95 下一个项目是重现 Escher 的 circle limit:

![]( https://upload.wikimedia.org/wikipedia/en/5/55/Escher_Circle_Limit_III.jpg)

以及渲染 4 维空间中的双曲蜂巢:

https://en.wikipedia.org/wiki/Uniform_honeycombs_in_hyperbolic_space

这个里面的数学比之前所有这些加起来还要难。
mayne95
2018-07-13 11:46:20 +08:00
@mathzhaoliang 感谢楼主的帖子和项目,顺藤摸瓜,发现了很多好玩的东西。Escher 的画真的很棒,GEB 还没看完,又来个维度,真幸福。
OfficialYoungX
2018-07-13 14:38:16 +08:00
[quanta magazine]( https://www.quantamagazine.org)了解一下?
mathzhaoliang
2018-07-13 14:51:10 +08:00
@OfficialYoungX 好像是个科普网站?
darkcode
2018-07-15 17:16:52 +08:00
有意思,就是想到这些就害怕
hmzt
2018-07-17 13:51:33 +08:00
效果很赞,不过感觉刘慈欣对高维和低维空间的理解有问题,夏虫不可语冰,三维空间的我们是无法想象和模拟真实的四维的.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/470461

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX