万花筒里的数学:双曲空间、蜂巢、球堆以及分形

本文介绍我和哥廷根大学的陈浩老师最近合作完成的一个数学可视化项目:绘制高维双曲空间中的球堆。这个项目非常有意思,可谓“雅俗共赏”,一方面读者不需要具备专门的数学知识,仅通过直观欣赏即可领略数学中的对称之美、分形之美;另一方面它的背后涉及不少硬核的数学,如双曲几何、Coxeter 群、动力系统等,漂亮的图形背后蕴含着更为深刻的内在美,所以我迫不及待地把它写出来分享给大家。我尽量不引入复杂的数学概念和证明,但有时候也很难避免做一些推理。

文章的主标题是万花筒,我想这个大家应该都比较熟悉了,而副标题则涉及四个数学名词双曲空间 (hyperbolic space)、密铺 (tiling)、球堆 (ball packings)、分形 (fractals),这几个概念恐怕对有些同学就比较陌生了。打个比方的话,双曲空间是故事发生的舞台,密铺和球堆是舞台上的两位主演,它们相互合作呈现出分形的效果。

二维随机游动 (二):一个随机的完美迷宫分别有多少个死角、拐角、岔路和十字路口?

此为二维随机游动系列的第二篇文章,但本文介绍的理论也适用于一般的图。

问题:在 \(n\times n\) 的正方形网格图 \(G_n\) 的所有生成树中等概率地随机任选一个,记这个随机生成树为 \(T\)\(T\) 叫做 \(G_n\) 的一个均匀生成树。对 \(G_n\) 中任一顶点 \(v\)\(v\)\(T\) 的叶节点的概率是多少?

这个问题也可以表述为,“对一个完全随机的 \(n\times n\) 的完美迷宫,求它包含的死角的比例”。这里一个迷宫称作是完美的,如果迷宫中的任何两个房间之间都有且仅有唯一的道路相连 (这正是生成树的等价描述!)。迷宫中的一个房间称作是“死角”,当且仅当它只有一条道路与其它房间相通。换句话说,一旦进去了就必须原路返回,没有其它出路 (这正是叶节点的等价描述!)。

下图显示了三个不同的均匀生成树,它们分别来自大小为 \(80\times 80\)\(120\times120\)\(200\times200\) 的三个网格图,这三个生成树的叶节点 (用蓝色标出) 占全体顶点的比例分别为 \(1884/6400=0.294375\)\(4234/14400\approx0.294028\)\(11776/40000=0.2944\)。咦?看起来好像是在围着一个固定的值波动喔?

二维随机游动 (一):逃出太阳系可没有你想象的那么难!

这是一个关于二维随机游动的小系列,整理自我研究生时的读书笔记,每篇文章会从一个有趣直观的问题出发,介绍随机游动理论中的一个相关知识。整个系列的内容都比较基础,涉及的知识在 Durrett 的教材 1 中都可以找到。

今天的问题依然有趣,但是并不简单。

问题:假设某人以太阳系的中心为原点出发,在一个固定的平面内,以恒为 1 米的步长作随机行走。每次这个人等概率地随机选择东、南、西、北中任一方向,然后向此方向移动 1 米的距离。如果某个时刻此人回到了原点,或者离开了太阳系则过程结束。

现在有 A, B 两个旁观者打赌哪一种情形先发生,A 认为此人会先回到原点,B 认为此人会先离开太阳系。请问 A, B 获胜的概率分别是多少?

作为参考,太阳系半径约为 45 亿千米,看作一个中心在原点的圆形区域。

Todd-Coxeter 算法和 3D/4D 均匀多胞体

The English version of this doc is here.

本文要介绍的是我写的一个高颜值的、脱离了低级趣味的小程序:用 Python 和 POV-Ray 绘制各种三维多面体和四维多胞体,代码在 github 上。

以下是用这个程序渲染的一些例子:(注意不同颜色的顶点/边/面表示它们在对称群的作用下位于不同的轨道中,具体解释见后)

例子

  • 所有的 Platonic 多面体,Archimedean 多面体,比如 snub dodecahedron:

Möbius 变换的分类与上半双曲空间的等距

2021/06/27 更新:我更新了一下 shader 代码,把每个动画放在一个 SVG 图片中。最后几个动画代码是可以使用键盘选择场景的,具体操作如下:

  • 按下 1 开启/关闭 Möbius 变换。
  • 按下 2 开启/关闭椭圆旋转。
  • 按下 3 开启/关闭双曲缩放。
  • 按下 4 开启/关闭展示 Riemann 球面。

这几个按键可以组合出许多不同的效果来!


本文的想法源自 Roice Nelson 的 shadertoy 项目,我觉得他的创意很棒,就是效果有点糙,于是动手改进了一番,结果见这里。不懂的人看这个动画可能只是觉得好玩,其实它背后的数学并不简单。

这篇文章将用动画的形式从三个角度演示 Möbius 变换,这三个角度是密切相关的:

  1. Möbius 变换作为扩充复平面 \(\hat{\mathbb{C}}\) 到自身的全纯函数。
  2. Möbius 变换作为 Riemann 球面 \(S^2\) 到自身的全纯函数。
  3. Möbius 变换作为上半双曲空间中的等距变换。

本文只做演示,并不介绍详细的数学证明。读者可以参考下面的资料:

  1. 维基百科页面.
  2. Visual complex analysis, Tristan Needham.
  3. Indra's pearls, chapter 3.

其中我特别推荐 Indra's pearls 一书。借助本文的动画你可以很容易地理解这些资料中的内容。

文中的动画全部使用 shader 程序制作,需要你的浏览器支持 Webgl2.0,代码在 github 上。

 | 

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器