画出降维后的图片_有没有人能画出《三体》里太阳系被二维化的概念图?

按照 @小夫子老男孩 答案中视频的思路,我自己画了几幅星球降维的效果图。【manim】降维打击可视化_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com

视频中把三维降至二维的思路,是先设计一个「二维降至一维」的方案,然后把三维中的两维按方案降至一维,另一维不变。

「二维降至一维」的方案,是「交错法」:把一个点在二维空间中的两个坐标写成小数形式,然后把各位小数交错,就得到它在一维空间中的坐标。比如,二维空间中的点 (0.123, 0.456),就会映射到一维空间中的点 0.142536。交错法可以得到二维正方形 [0,1)^2 与一维线段 [0,1) 之间的一个映射,这个映射几乎是一个双射。

有几点说明:如果这个「几乎」让你耿耿于怀,可以参看我下面这个答案是怎么构造出一个严格的双射的。不过在这个答案中我不想纠结这一点,也不想纠结区间到底是开还是闭。如何构造 [0,1] * [0,1] 到 [0,1] 的双射 ?​www.zhihu.com

2. 上面的交错法只能处理空间中坐标在 0 到 1 之间的部分,不能处理整个空间。视频中又用 sigmoid 函数在区间 (0,1) 与所有实数间建立了一个双射,解决了这个问题。为简便起见,我的这个答案就只考虑坐标在 0 到 1 之间的部分。

3. 视频中交错法使用的是十进制。为了让降维的结果更混乱、更壮观,我采用二进制。

在展示降维效果之前,我先来直观地演示一下,交错法是怎么把二维正方形 (0,1)^2 映射成一维线段 (0,1) 的。

首先把二维正方形切成四块,编号 1~4:

然后按顺序把它们排成一维:

再把每一小块切成四块,同样编号 1~4:

把每一小块中的四块也按顺序排成一维:

这个过程可以无限进行下去,于是正方形就可以被映射成一条没有宽度的线段。不过屏幕的分辨率是有限的,迭代 5 次之后就可以把一幅 32*32 的图片变成一幅 1*1024 的图片,这已经接近大多数屏幕的分辨率了。我下面的图示只迭代 4 次。

如果不采用二进制而是采用 k 进制,则在每一步中,不是切成 4 小块,而是切成 k*k 小块。显然二进制能把图片打得更乱。

下面演示星球降维的效果。

首先是二维降至一维。考虑二维空间中,以 (0,5, 0.5) 为中心、0.5 为半径的一颗圆形星球,我把它画成一幅 16*16 的图片:

把它用「交错法」降至一维后得到的 1*256 图片是这样的(纵向拉长了些以方便观察):

可见,「交错法」确实把原来的图片打乱了,星球的表面与内部混乱地交织在一起。

然后是三维降至二维。考虑三维空间中,以 (0.5, 0.5, 0.5) 为中心、0.5 为半径的一颗球形星球,用一幅 16*16*16 的「图片」表示。这个图片本身比较难画,我就不画了。按照视频中的思路,把其中的两维用「交错法」降至一维,会得到一张 16*256 的图片,这张图片如下:

在三维降至二维的过程中,有一个维度跟另外两个维度的地位不同,这让人不爽。于是我干脆画了四维降至二维的效果图:把四个维度分成两对,用「交错法」把每一对降至一维。考虑四维空间中,以 (0.5, 0.5, 0.5, 0.5) 为中心、0.5 为半径的一颗超球形星球,用一幅 16*16*16*16 的「图片」表示。它降至二维后,会得到一张 256*256 的图片,这张图片如下:

有没有很壮观!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值