原谅我用了一个公众号风格的标题。
读过三体的朋友,可能还能回忆起,刘慈欣在死神永生中对四维空间碎片有这样的描述:
首次从四维空间看三维世界的人,首先领悟到一点:以前身处三维世界时,他其实根本没看见过自己的世界,如果把三维世界也比做一张画,他看到的只是那张画与他的脸平面垂直放置时的样子,看到的只是画的侧面,一条线;只有从四维看,画才对他平放了。他会这样描述:任何东內都不可能挡住它后面的东西,任何封闭体的内部也都是能看到的。这只是一个简单独规则,但如果世界真按这个规则呈现,视觉上是极其震撼的。当所有的遮档和封闭都不存在,一切都暴露在外时,目击者首先面对的是相当于三维世界中亿万倍的信息量,对于涌进视觉的海量信息,大脑一时无法把握。
...
这时.他们不得不面对一个全新的视觉现象:无限细节。在三维世界里,人类的视觉面对的是有限细节,一个环境或事物不管多么复杂,呈现的细节是有限的,只要用足够的时间依次观看,总能把绝大部分细节尽收眼底。但从四维看三维时,由于三维事物在各个层次上都暴露在四维视野中,原来封闭和被遮挡的一切都平行并列出来。比如一个封闭容器,首先可以看到它内部的物体,而这些内部物体的内部也是可见的,在这无穷层次的暴露并列中,便显露出无限的细节。在莫沃维奇和关一帆面前的飞船,虽然一切都显露在眼前,但任何一个小范围内的一件小东西,比如一只水杯或一支笔,它们并列出来的细节也是无限的,枧觉也接收到无限的信息,用眼睛看时,穷尽一生也不可能看全它们在四维空间的外形。当一个物体在所有层次上都暴露在四维时,便产生了一种令人眩晕的深度感,像一个无限嵌套的俄罗斯套娃,这时,“从果核中看到无穷”不再是一 个比喻。
看到这一段的时候,我想大家都会好奇,当我们真正的身处四维空间的时候,看到的景象是什么样子的?
很抱歉,没有人知道答案,因为没有人能够进入四维空间。但是我们可以把四维空间中的物体投影到三维空间中,然后看看它的投影的结果是什么样子的。
下图是一个例子:(注意:无限细节!!!)
上面这四个图其实绘制的都是四维空间中的一个正多面体 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 这个项目。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.