每当我制作这类视频时,总会出现一个特殊时刻:动画的制作过程涉及解决一堆琐碎的技术难题,而当我在屏幕上看到这些数学原理“活”过来时,我一直试图解释的底层逻辑突然之间豁然开朗。那些最精彩的瞬间往往预示着这将成为我最喜欢的视频之一,而就在刚才整理这段片尾时,我就有了这种感觉。

今天的故事其实并非始于数学课堂,而是从艺术室开始。想象你站在画廊中,凝视着一幅港湾里船只的画作;随着视线向右上方移动,整个世界开始扭曲,你看到水边有一座村庄。在密集的建筑群中,当你的视线向下移向其中一栋建筑的入口时,扭曲感更加强烈,那里通向一个挂满艺术品的走廊。而在走廊尽头,你又看到了自己——正盯着那幅船只的画作看。这就是M.C.埃舍尔1956年的石版画《版画展厅》(荷兰语:Prententoonstelling)。

在他写给儿子的一封信中,埃舍尔描述了自己创作一幅年轻人饶有兴趣地观看印着自己肖像的版画的过程。他称这是“我做过的最奇怪的事”,对他而言,这已是极高的评价。埃舍尔的艺术深受全球喜爱,其作品常以悖论主题或具有某种角色特征的、独特且令人满足的几何图案为特色。这种喜爱在数学家群体中尤为明显,因为尽管埃舍尔本人没有接受过该领域的正式训练,但他的艺术经常触及数学中令人惊讶的深层概念。

《版画展厅》正是这种意外深度的完美例证。2003年,数学家德·斯密(De Smit)和伦斯特拉(Lenstra)对这幅作品中真正发生的事情以及埃舍尔所实现的令人眩晕的自洽循环进行了精彩的分析。本视频的主要目标之一,就是提供对他们分析的可视化解读,一如既往地旨在让你产生一种“我也能重新发现这一点”的感觉。

从这一分析中意外浮现出的一个问题,是关于这幅画的正中心究竟应该填入什么内容。起初,这听起来像是一个不合逻辑的问题。如果你从右上方来看,那里似乎应该出现村庄的建筑;但从左侧看,它看起来更像是画框的一部分。然而,如果你从下方来看,将其视为画廊本身的一部分似乎更为合适。整个场景中关于你确切位置的模糊性, somehow 都被压缩到了中间那个空白圆圈里。

出于娱乐目的,既然我们身处2020年代,我让一个扩散模型尝试填补这一空白。不出所料,它表现得极其糟糕。它完全没能理解这一点。当然也要给这台可怜的机器一点面子,这确实是一个本质上模糊且定义不清的部分。但尽管如此,我希望到视频结束时你会同意:存在一种、而且只有一种填充方式,感觉像是可以完美嵌入的正确拼图块。

在深入数学原理之前,我想先给出一个纯直觉的描述,解释埃舍尔实际上是如何创作这幅作品的。这可以分为三个不同的步骤:第一步是从一个“拉直”的同一概念版本开始,即一个男人正在看一幅画。这幅画中有一个港湾,港湾里有一座城镇,城镇中有一家版画展厅,展厅里有那个男人,如此循环往复。你可以无限地放大下去。

这种图像包含自身的自相似概念,在平面设计师中有一个专门的名称:德罗斯特效应(Droste effect),得名于一家在其品牌宣传中使用该效果的可可公司。事实上,这似乎是20世纪初各种产品常用的一种营销噱头。然而,埃舍尔使用的自相似德罗斯特图像涉及的缩放深度远超这些例子,其中自相似的副本比原始图像小256倍。你很快就会看到这个数字的来源。

埃舍尔的天才之处在于,他直觉地意识到必须有一种方法可以将这种“图像嵌套在自身内部”的概念转化为这个扭曲的循环,使得缩放过程隐含在观众视线绕圆游走的过程中。顺便提一下,你可能想知道这个“拉直”的版本是从哪里来的?答案是:我提到的那两位数学家慷慨地允许我们使用它。这是他们借助两位荷兰艺术家汉斯·里希特(Hans Richter)和雅奎琳·霍夫斯特拉(Jacqueline Hofstra)的帮助,从埃舍尔的原作中逆向工程出来的。

他们的逆向工程技术非常有趣。在某种意义上,这涉及对原始作品取对数。我知道这句话现在听起来可能像胡言乱语,但我保证在视频的后半部分,这将变得合情合理。为了概述埃舍尔构建这个循环的基本思路,我想使用一个比他正在处理的例子更简单的案例。我们将展示这个自定义的自相似德罗斯特图像:一个派形生物正在看一幅房子的画框,而那个同样的派形生物就住在那所房子里。

在这个例子中,自相似副本仅比原始图像小16倍,这使得一切更容易一次性看清。我将在右侧保留一个单独的工作区来草拟我们的总体目标。你可以这样思考:将16倍的缩放因子分布在正方形的四个角上。例如,假设你希望派形生物本身在左下角出现时大小大致相同。那么如果我们将原始图像放大2倍,我们会取那个放大版本左上角的内容,并将其放置在我们工作区的左上角。

类似地,再放大2倍(即总共4倍),取那个放大版本右上角的内容,并将其扩大后放置在我们工作区的右上角。最后再一步,再放大2倍(即总共8倍),取那个放大版本右下角的内容,将其吹大后放置在我们工作区的右下角。这四个切出的角落大致勾勒出了我们要创建的内容。只要能找到一种平滑的方式填补它们之间的空隙,那么当旁观者的视线在这幅图像的圆周上漫游时,他们看到的将会不断放大,直到优雅地与缩小16倍的自相似部分连接起来。

我们可以尝试天真地将它们全部拼接在一起,就像这样……

看起来效果不错,但肯定不如埃舍尔所达到的那样平滑和优雅,所以我们还有工作要做。顺便提一下,我一直在翻阅的这本书《M.C.埃舍尔的魔力》,是我在海牙埃舍尔博物馆愉快参观时获得的。如果你将来去荷兰,我强烈推荐你去那里看看。当我们翻到关于版画展厅的那一部分时,它让我们瞥见了埃舍尔的实际创作过程。对他来说,第二步是创建这个扭曲的网格。

对于这里的动画演示,我将展示该网格的一个轻微修改版,它在数学上生成起来稍微好一些,但说明了同样的关键点。在他的案例中,他处理的自相似德罗斯特图像具有256的缩放因子,因此为了将其分布在四个角上,当他从一个角落走到下一个角落时,需要以4的因子进行缩放。如果你仔细观察他的网格,比如右下角的一个方格,请注意,如果沿着包围该方格的顶部和底部线条延伸到图像的左下角,这些相同的线条最终会围成一个现在大四倍的方格。

同样地,如果你查看该区域中小方格左右边界线条,并向上跟随它们,它们最终会舒适地围成一个大四倍的方格。因此,这种网格在一定程度上编码了我们想要的从一个角落到下一个角落的缩放关系。现在对于我们的项目,我们只需要从每个角到下一个角放大两倍因子,我们将使用这种网格的修改版,但基本思路是一样的。

你可能会自然地想知道这个网格究竟从何而来,但我实际上想推迟这个问题,直接跳到第三步,即如何结合使用这种网格和自相似的德罗斯特图像来创造埃舍尔的最终效果。其工作原理是首先在原始图像上铺上一个普通的正方形网格,然后假设你想让这里的这部分最终出现在我们最终版本的这个角落。

你要做的是取里面的每个小方格,然后将其内容复制到扭曲网格版本中对应的小方格里。从那里,原始网格中的每个相邻方格都被迫进入扭曲版本中对应的相邻方格,因此你可以简单地通过跟随网格来追踪图像必须去的地方。扭曲版本上的网格线从左下角到左上角以两倍因子散开的事实意味着,当你沿着那条线向上走时,我们场景的规模会自动放大两倍。

这种过程的理念是,作为一名艺术家,逐件复制一个小方格内的内容到另一个小方格中相对简单直接,因为在这个小规模上事物是没有变形的。这肯定比试图从零开始、面对空白页面构想并画出适当的扭曲最终图像要容易得多。因此,基本上有了这个扭曲网格在手,复制每个小方格的过程变得令人愉悦地自动化。

如果我们让这个自动过程一直运行一圈,它会很好地与初始位置闭合。为了实现这一点,要求我们的原始图像在放大16倍时具有自相似性。我希望你会同意我们最终得到的结果相当不错,它重现了相同的一般效果,但最重要的是,我认为这让我们更深刻地欣赏埃舍尔自己的构图。

他实际上非常刻意地选择了所有不同尺度的图像元素。正如他所引用的:“我有意识地选择了一系列类型的物体,例如墙上的一排版画,或城镇中的一组房屋。”如果没有这些循环元素,向随机观众传达我的意图将更加困难。这种拥有一个直线参考图像和一个扭曲网格,并将两者结合以创建扭曲场景的想法,是平面设计中的一种常见过程。

这被称为网格变形(mesh warp),埃舍尔并非为此案例发明它,他在之前的其他作品中多次使用过这种方法。对于我们的故事来说,关键在于将德拉斯特缩放转化为循环的所有逻辑都抽象并纯化到这个网格中,从而引出了自然的问题:它从何而来?你是如何制作它的?

你可以想象作为一种初始的朴素方法,你可能会尝试从一个角到下一个角线性地缩放所有内容。但如果你立即这样做,你会看到冲突。这两种缩放过程对各个方格施加了不同的压力。例如,这个方格基于从右侧放大想要向外张开,但同时也基于向上走时的缩小想要在另一个方向向内收缩。

显然,埃舍尔通过弯曲所有线条来缓解这种张力以解决冲突。但似乎还有另一个关键约束引导着他,这 presumably 使图像传输过程更容易,并使最终结果看起来更自然,同时也让任何沉浸在复分析中的数学家的耳朵立刻竖起来。在他最终的扭曲网格中,小方格实际上是正方形。

明确地说,这对于大多数网格变形来说并不真实。在大多数情况下,你绘制的扭曲网格线不一定以直角相交,它们所界定的小区域通常是小平行四边形。这对艺术家来说仍然可行,你仍然可以进行传输,但 presumably 当存在这种变形时,从原始版本复制到扭曲版本的动作会更加别扭。因此,如果在扭曲网格中,小方格至少近似保持为正方形,那将会好得多。

当你仔细观察埃舍尔用于版画展厅的网格时,它具有这一特性。所有线条都以直角相交,并且在足够小的尺度上,它们界定的区域确实是近似正方形。在艺术效果上,这有一个很好的作用:尽管整个场景在全局尺度上是戏剧性地扭曲和变形的,但在局部尺度上放大时,一切都相对没有变形。

这使得埃舍尔图像的每个局部部分都易于识别。而在数学上,这才是故事真正变得有趣的地方。你看,这种从二维空间到二维空间的函数概念,其中小方格保持近似正方形,在数学中扮演着特殊角色并有一个特殊的名称。

数学,这被称为共形映射(conformal map),它在复数输入和复数输出函数的研究中经常出现。此刻,我们要退后一步,走出艺术教室,漫步至数学系,我想在此为大家提供一堂关于该领域核心思想的微型课程。接下来的基本计划是:

首先,我想做一个小小的复习,回顾复数和复函数的基础知识;然后,我希望花一些有意义的时间来建立对复数背景下对数函数形态的直觉。一旦你掌握了这一点,我们将探讨一种完全不同的思路来重现埃舍尔在他的版画展厅中所呈现的效果。

让我们先从基础复习开始热身。我们通常认为实数生活在一维的线上,即实数轴;而复数是二维的。具体来说,我们将虚常数 i(定义为负一的平方根)视为位于零上方一个单位的位置。该平面上的每一点都代表某个实数与 i 的某个实数倍数的组合。

在提及一般复数时,通常使用变量 z 来表示;我们要玩的游戏是理解各种关于 z 的函数。一个简单但重要的例子是将 z 乘以某个常数。函数 f(z) = 2z 的效果将所有内容放大两倍。但是,如果乘以虚数(如 i)呢?

众所周知,1 乘以 i 得到 i;根据定义,i 乘以 i 等于负一。你会注意到这两者都涉及90度的旋转;更一般地说,将任何值 z 乘以 i 的效果就是90度旋转。

更进一步,当乘以任何复数常数时,效果是缩放和旋转的组合。有一种很好的方法来思考具体应该缩放多少以及旋转多少角度。零乘以任何数都是零,所以原点必须保持固定;而1乘以任何常数 c 都等于该常数本身。

这意味着点“1”必须被拖动到落在我们要讨论的那个特定常数 c 上,这就完全确定了缩放和旋转的量。从那里开始,其余的网格尽可能保持刚性。

我们要强调的一个关键点在于:如果你只是乘以某个常数,形状总是被保留下来的。无论你想画什么(比如正方形),它可能会被缩放或旋转,但除此之外没有变形。现在,对于更复杂的函数,情况变得更加有趣了。

一个简单但不平凡的例子是将每个数 z 映射到其平方(z²)。因此,输入2必须移动到4;输入 i 必须移动到 -1;-1本身则被映射到正1。

完整地来看,如果我让输入空间网格线中的每一点移动到其对应的输出点,效果如下:这是一种相当不错的视觉效果。与乘以常数不同,形状绝对不再被保留。网格线变得弯曲和扭曲。

然而(这是一个关键点),请注意在小尺度上发生的情况。例如,仅关注输入空间中的这个小正方形。当你再次观察变换过程时,你会发现形状在近似意义上被保留了,至少在小到足够的尺度上是这样。

我们原始网格中的小正方形在经过函数处理后仍然近似保持方形。用专业术语来说,函数 z² 给出了一个共形映射。而且选择 z² 在这里其实并不特殊。

以下是将每个点 z 变换为 z³(z的立方)时的样子:正方形仍然近似保持方形。

好吧,也许我高亮显示的这个例子在输出中看起来并不完全像正方形,但这仅仅是因为它起始时太大了。明确地说,我所说的这种共形性质是一种极限性质。特定的正方形可能不会精确地变成方形,但想法是:当你不断放大时,选择输入空间中越来越小的正方形区域,产生的输出确实会被方形更好地近似。

而且关于像 z² 或 z³ 这样的多项式选择也没什么特别之处。对于你能想到的几乎任何复数函数,这一性质都成立:在足够小的尺度上形状被保留。这几乎像魔法一样。

复数的使用在这里非常相关。如果你不是将2D空间中的点简单地视为带有 xy 坐标的实数对,而是写下 x 和 y 的任意函数以获得新的数字对,那么当输入空间中的点被变换时,通常会发生的情况是那些微小正方形的输出会被挤压和扭曲。

即使你不断放大,最终的极限形状通常看起来像平行四边形,而不一定是正方形。因此,复函数在这方面确实很特殊。微小正方形保持方形的根本原因归结为微积分:你看到的是这些函数具有导数的含义。

这听起来可能有点奇怪,但你可以这样类比:对于大多数实数函数,如果你以常规方式可视化它们(即在 x 轴上显示输入,y 轴上显示输出),当你不断放大到该图上的任何特定点时,它看起来越来越像一条直线。

也就是说,变化率(给定 delta x 时的 delta f)趋近于一个常数。这 literally 意味着函数具有导数,但这并不是唯一的可视化方式。这里有另一种看待同一概念的方法:

与其查看函数的图形,不如让我们将同一个函数视为一种变换。也就是说,你将让实数轴上的每个点移动到另一条数线上对应的输出点。你会注意到的是,输入空间中均匀分布的点在输出空间中被扭曲了,这意味着函数的变化率通常不是恒定的。

我们点之间的间距可以从图像的一部分变到另一部分。但是我们知道,当你不断放大到特定的输出时,变化率趋近于一个常数。点看起来越来越均匀分布。具体来说,如果你取一小簇点

围绕特定输入并将它们复制到输出空间中对应的区域,只需将所有内容按某个常数因子缩放,就能大致对齐所有的点。这与斜率告诉我们的分析事实相同,只是处于不同的视觉语境中。但这种语境更容易延伸到将复值函数视为复平面上的变换这一思考方式上。在那里,我们会把给定输入周围的邻域看作一个微小的点网格,就像之前一样,并让该网格上的每个点移动到其对应的输出位置。在这种情况下,变化率趋近于常数的含义基本上是完全相同的方程。你需要在脑海中形成的视觉图像是,如果你取输入周围的那一小块正方形区域并将其复制到对应的输出中,你可以通过乘以某个常数来大致匹配输出的网格线。

请记住,在复数的设定中,这意味着以某种方式旋转和缩放它,具体取决于该复常量的值。由于旋转和缩放保持形状不变,这意味着输入空间中的所有微小正方形在此变换下至少近似地保持为正方形。退一步说,这是讨论这一切的关键所在。尽管像埃舍尔在其版画展厅中使用的共形映射这样的函数受到极大的限制,并且在你可以连续扭曲二维空间的一般方式中也极为罕见且不同寻常,但尽管如此,仿佛有魔法一般,只需使用复数的语言,你就能以某种方式创造出整个共形映射族,甚至无需刻意努力。

你所要做的只是混合搭配复数的标准函数。唯一的约束是这些函数必须具有导数,但这对于你想到要写下的大多数函数来说都是成立的。对于我们这个故事——解读版画展厅中正在发生的事情而言,这意味着我们有了完全新的方式来重构关键问题:你能构造某个特意定制的复函数,使得围绕输入放大的行为看起来像是在输出中绕圈行走吗?现在,在我们仅具备复分析的基础速成知识的情况下,如果不先建立更丰富的函数库来操作并熟悉它们对复数的实际行为方式,很难知道从哪里开始。

在这种情况下,你真正需要理解的函数只有两个:e的z次方和自然对数。我想静下心来花一些有意义的时间来理解这两个函数,我认为你会同意这是值得的。在我看来,每个人一生中至少应该有一次体验理解复对数之喜悦的机会。不过首先,一个必要的先决条件是理解复指数函数。常规观众可能熟悉将e提升到复数幂的样子,但复习一下总没有坏处。我们可以通过专注于更熟悉的实数输入及其对应的实数输出示例来构建变换的基础框架。

例如,e的0次方等于1,所以输入为0的点映射到输出为1的点。然后每次让输入增加1,输出就以e的因子增长,这意味着它实际上跑得相当快。而在另一方面,当你减小输入使其进入负数时,向左的每一步都对应于输出的缩小,同样是以e为因子。特别地,你会注意到在这种情况下输出始终是一个正数。当然,当输入和输出都变为复数时情况会变得有趣得多。在这里,你需要知道的一切都归结为你让输入的虚部增加时会发生什么。

在那里发生的事情是相应的输出沿着一个圆行走。如果你想知道为什么指数函数的虚部输入会让你像这样绕着圆圈走,我们在这个频道上已经讨论过很多次了。请参阅屏幕和描述中的一些链接。我要在此重申的一个关键点是,使e的z次方函数非常优越于其他底数的指数函数的原因在于:当你的输入以每秒1个单位的速度增加时,输出以其圆圈为轨迹,恰好以每秒1弧度的速度旋转。因此特别地,虚部正好增加2π会导致输出完成一次完整的旋转。

换句话说,我一直用高度恰好为2π绘制的这些垂直线段,在应用该函数时会被整齐地映射到一个完整的圆上。你会注意到我是如何将这些特定的垂直线段在实轴方向上等距分布的,其中从1到下一个部分的实部增加量为1。右侧对应的每个圆之间相差一个恒定的缩放因子,具体来说是e这个缩放因子。之前对于更简单的函数z的平方,我将其展示为一种将输入移动到输出的变换方式。

在这种情况下对于e的z次方,如果你好奇同样的想法看起来是什么样子的,最容易的方法是取输入空间网格的一个子集(比如这里这个),然后看看将每个正方形移动到对应输出时是什么样子的。当我们实际使用此函数来实现版画展厅的目标时,通过思考这些垂直线及其变成的圆来锚定你的思维会非常有帮助。事实上,我有一个非常有趣的想法来说明这些垂直线如何变成同心圆以及它们如何将整个输入空间携带过来。

我喜欢想象将整个z平面卷成一个管状,使得所有这些垂直线最终都变成圆。具体来说,每个圆的周长将是2π。接下来想象拿起这个管子将其对齐在输出空间原点的上方,然后稍微向下挤压到该输出空间中,将管子里的所有圆变成这些指数级增长的同心环。这只是我喜欢的思考方式,但无论你选择如何思考,我想让你脑海中刻印下来的想法是垂直线变成圆。

现在这里要强调的另一个非常重要点是,多个不同的输入可以落在同一个输出上。例如e的0次方等于1,但e的2πi次方也等于1。同样地还有负2πi、4πi等等,事实上沿着任何给定序列的无限多个点……

垂直方向上每隔 2π 间隔的直线,随着该竖线被卷曲成圆形,都会折叠在一起。我们说指数映射是多对一的,虽然目前还不太明显,但这种垂直方向上的重复性对于最终重现《版画展厅》的效果至关重要。好的,所以指数函数为我们提供了第一个要素,其特征是将直线转化为圆形;而我们需要第二个要素,即此类指数的逆运算,也就是自然对数。基本思路是将这些圆形重新展开为直线。

现在,如果我们想象在右侧的复平面上绘制一个德罗斯特图像(Droste image),比如我们之前讨论过的例子——一只皮克丘生物看着一幅它自己居住的房屋图片,这将特别有趣且与我们的故事密切相关。换句话说,现在是时候让你我来回答那个问题了:对一张图片取自然对数究竟意味着什么?

请思考一下。你已经知道,像左侧这样高度为 2π 的垂直线段,当你应用映射 e^z 时会被转化为一个圆。因此,自然对数会将图像上的一组圆形点拉直成这样的线段。同样地,如果你观察一个恰好小 e 倍的圆,它也会被拉直成一条高度相同、但向左移动一个单位的线段。

接着,这两个圆之间的每一个圆都会被展开成这两条垂直线之间的一条竖直线段。更一般地说,图像中越来越小的环都会展开成这些垂直线段,每条高度均为 2π,并依次向图像左侧更远处排列。得到的结果有点令人眩晕,但仔细想想还是很酷的,我想让你注意几个重要的点。

你可能已经注意到图像向左移动时会重复出现。我邀请你在脑海中稍作思考,为什么会出现这种情况。但在讨论这种重复之前,我想谈谈它在另一个方向上的重复方式。按照我目前的画法,左侧值虚部的范围是从 0 到 2π,但这其实是一种任意的选择。

请记住,如果你让左侧的值 z 继续向上移动另一个 2π 单位,右侧对应的 e^z 值就会沿着同一个圆继续循环。所以我相信你会同意,让图像沿每一条竖直线在垂直方向上重复出现是令人向往的。

反之亦然,当你让左侧虚部向下变小时,右侧对应的值只是沿着同一个圆继续循环。因此,你看到的图案可能也应该以这种方式重复出现。更明确地说,我在左侧绘制此图像所使用的规则是:对于左侧平面上的每一点 z,查看右侧对应的 e^z 值,并为其分配匹配的颜色。

例如,这个扭曲的皮克丘生物、这一个以及那一个,实际上都对应于右侧图像左下角那个大皮克丘生物的同一部分。另一种思考方式是,由于函数 e^z 是多对一的,我们感觉自然对数作为其逆运算,似乎应该是一个多值函数,即一个输入映射到多个不同的输出。

在实践中,很多时候你不希望函数有多个输出,有时这甚至违背了你语境中函数的定义。因此人们通常会选择左侧平面的一个带状区域作为自然对数的输出值。在复分析中,这被称为为函数选择分支切割(branch cut)。

然而,为了重现和理解埃舍尔的这幅作品,将对数视为多值函数其实更好。在这种情况下,右侧的每个点对应于左侧每隔 2π 垂直间隔无限延伸的一系列重复点。在我们的特殊情况中,当你向左移动时也会看到这种重复模式,但这完全是另一回事。

对于大多数图像你不会看到这个现象。它 specifically 源于我们正在处理一个自相似的德罗斯特图像,即按一定因子放大时看起来完全相同的图像。这直接源于对数和指数函数的一个核心属性:指数函数将加法转化为乘法,而对数则将乘法转化回加法。

例如,想象取右侧平面上某个较小的值 w,同时也考虑放大 16 倍、离原点更远的那个值。现在如果我们看左侧对应的 log(w) 值,乘以 16 这个操作看起来就像加法了:具体来说是向右移动 log(16) 个单位,这只是一个实数。

事实上,在这个怪异的扭曲对数图像中,宽度为 log(16)、高度为 2π 的这个矩形包含了右侧图像的所有信息。它对应于德罗斯特图像的圆环部分,如果你将该矩形向左精确移动 log(16) 个单位,你会得到一个缩小了正好 16 倍的圆环版本。

它会像拼图块一样完美地嵌套其中。如果无限次重复这个过程,就会形成 characterize 德罗斯特缩放效果的无限嵌套结构。按照我目前的画法,对数图像在右侧有一个截止点。此时你已经知道左侧的竖线对应于右侧的圆,所以你可能猜到这是因为我为德罗斯特图像设定了最大半径。

当然,你不需要这样做。原则上它可以向所有方向无限延伸,随着放大遵循相同的自相似模式。而对数图像在左侧的结果则是尽可能向右延伸,同样带有重复的平铺图案。

总之,左侧的对数图像在垂直方向上是周期性的,基本上是因为右侧的旋转是周期的。这对于任何图像都会发生。而在德罗斯特图像的这种特殊情况下,它在水平方向上也是周期性的,因为当你放大时德罗斯特图像会重复出现。

这种双重周期性属性是我们最终结果所利用的关键。现在我们已经具备了所需的所有基础。

现在,我终于可以向大家描述那个将德罗斯特效应转化为埃舍尔式自包含循环的函数了。在直接深入细节之前,鉴于我们此前涵盖了大量内容,留出一些空间来消化这些信息或许值得。我原本打算在这段视频的某个时刻花30秒快速谈谈“3Blue1Brown人才计划”,现在或许正是合适的时机。这是我今年正在尝试的虚拟招聘会,其基本理念是:那些在业余时间学习复对数等知识的人,可能有兴趣加入志同道合、充满好奇心且技术导向的团队。因此,如果你正在寻找或愿意考虑新工作,请访问 3b1b.co/talent。

当你浏览该页面时,会发现我与相关团队的访谈、他们为你精选的技术谜题与挑战,以及其他旨在让你感受技术团队文化的内容。我倾向于向这一受众群体展示契合的职业机会,所以无论你现在还是将来求职,都请务必查看。好了,回到我们的主要目标:如何利用我们关于复函数、变换以及共形映射等构建的知识,构造出一种能重现埃舍尔《版画展厅》效果的函数?

也许最简单的方法是直接列出整个函数的框架,然后逐步详细讲解。首先取对数,得到一种奇特的双重周期平铺图案;接着以恰当的方式旋转并缩放该平铺图案;最后取指数,将其“展开”,但这次带有一种特定的扭曲。这看似怪异,但实际上有非常优雅的方式来解释和理解其背后的原理。回顾最初的德罗斯特图像,记得我们希望将那个大的派状生物与缩小16倍的自相似副本联系起来。

想象一条连接这两者的线。我们可以这样表述目标:最终函数应将这条线段变换为最终空间中的一个闭合环路。线段两端的端点分别代表大、小派状生物,因此识别这两个生物的函数至少应使这条线闭合。现在思考在图像的对数空间中这条线段的样子:大派状生物对应于虚轴附近的多个副本。正如我们讨论过的,缩小图像对应对数空间中的左移,因此这些副本代表小派状生物。

实际上,我们不仅使用水平线,还要利用对数图像在两个独立方向上的周期性。因此,我们将处理一条对角线,连接这个大的副本与左下角那个小的副本。这看似缺乏动机,确实如此,但解释其原因最好的方式就是展示其运作过程;之后如果需要,我们可以对比使用水平线会发生什么。对数图像中新的向下分量对应于原始路径中的顺时针旋转。

记住,我们的目标是将此转化为最终图像中的一个环路。你和我花了大约10分钟详细讨论了一个将线段变为圆形的函数,即 e^z。你需要做的是让该线段最终成为高度为 2π 的完美垂直线。这基本上归结为以恰当的方式旋转和缩放它,使其具备所需的长度和方向。如果你还记得我们在复数预热阶段讨论的内容:乘以常数会给出旋转与缩放的组合。

在这种情况下,我们可能希望左下角的大派状生物保持位置固定。这意味着对数图像中的该点必须静止不动,因此我们不是绕原点旋转,而是希望所有东西都围绕该点进行枢轴转动。假设我们将该点标记为 z₀,那么旋转和缩放的更新公式如下:大部分内容归结于选择你要乘的常数 c。如果你喜欢练习,不妨花点时间计算出该常数的具体值。

但在这里,既然我们要注重视觉效果并想玩得开心些,让我在这个小小的复平面上展示该常数,并演示如果我稍微移动它会发生什么。不同的选择会产生不同的缩放和旋转效果,经过指数运算后,会生成各种奇特的万花筒图像。你可以将整个操作视为一场游戏:试图找到那个正确的值,使一切如你在右下角图像中所需的那样对齐。

当设置为该适当值并重现埃舍尔效果时,在右下角的最终图像中,我一直在展示中间的孔洞,类似于埃舍尔原作中的空洞。但这实际上是人为的。函数的输出图像自然会用其自身向内螺旋的重叠图案填满该空洞。毕竟,左侧旋转后的平铺图案在整个平面中无限延伸,因此当你对其取指数时,它也会填满一切,除了零点。这就是基本操作:

转换到这种看似怪异的对数空间;旋转并缩放以重新对齐事物;然后通过指数运算转回。在重现了我们自己的埃舍尔变体之后,逐步回顾埃舍尔特定示例(包含版画展厅、看着城镇照片的人的海滨马耳他小镇)的相同过程或许不错。如前所述,第一步是将此场景放置在其自身的复平面上,其中所有缩放围绕的无限极限点位于零点。

第二步是对此取对数,这在本案中同样产生了整个场景的怪异变换,但这次有一点不同。由于埃舍尔使用了更深的缩放比例(放大倍数为256),

在这个新示例中,这些瓦片实际上跨越了复平面上更广阔的区域。第三步同样是旋转和缩放图像,这取决于乘以适当选择的复常数。约束条件是确保这个经过旋转的图像仍然在垂直方向上每 2π 个单位重复一次,但这次是沿着之前对角线部分的图像进行。然后第四步,将所有内容代入 e 的 z 次方中,得到的结果与埃舍尔的最终画作非常相似:在那幅图像中,绕圈行走对应于放大 256 倍。同样地,当我们用复函数来构建这种框架时,中间并没有空洞。最终结果本身就是一个德罗斯特效应图像(Droste image),尽管这次带有一种扭曲,使得自相似性无限深远地螺旋向下。

无论你希望放大多少倍,这种过程都有几点值得注意。首先,如果你将这个想法写成公式——即取对数、乘以常数,然后进行指数运算——这实际上可以简化为将输入值提升到某个复常数的幂。如果重新引入那个偏移因子,它只是引入了另一个常数。一方面,整个复杂的过程可以简化为页面上寥寥几个符号,这令人愉悦;但我认为这样做可能会掩盖实际发生的事情。此外,我之前提到过,如果你只尝试使用那些水平线,事情是行不通的。如果你好奇的话,这里展示了如果这样做会是什么样子:这意味着将所有内容旋转 90 度并按适当比例缩放。你确实会得到一些有趣的东西,但这并不是我们要追求的效果。

仔细想想,基本上发生的情况是你交换了旋转和缩放的角色。退一步看这种视角——即作品完全关于在对数空间中旋转的感觉,与埃舍尔使用扭曲网格和网状变形的更直观方法截然不同。但这两种视角之间有一条贯穿始终的联系线。首先,你现在可以理解我们究竟是如何重建和修改埃舍尔所使用的网格的。你基本上使用了我们构建的那个相同的函数,但不是将其应用于图像,而是应用到一个普通的正方形网格上。其实并不完全是普通网格,最好使用一种随着放大而变得密集的网格,使其在所有尺度下看起来都一样。

当你这样做时,对数会给你这种非常美丽的曲线瓦片图案。然后从那里开始,你使用同样的技巧,以正确的方式旋转事物,然后取指数运算,结果与埃舍尔花费许多艰苦小时构建的东西非常接近。请记住,我们使用复数语言的全部原因是:让我让你经历那些繁琐步骤的动机在于,这种共形性质作为副产品自然产生。原始网格中的微小正方形在最终结果中至少近似保持为方形。埃舍尔说,创作这幅作品让他头痛欲裂;虽然也许你和我也因为完全不同的原因忍受了一些痛苦,但回报是这种属性是我们无需额外努力就能获得的。

当然,你肯定不需要理解复导数或对数来欣赏埃舍尔的作品,我也不想暗示你需要这样做。然而,当你理解那方面更数学化的内容时,它赋予了你以一种截然不同的方式来欣赏埃舍尔真正在做什么的能力。这就是我觉得这一切迷人的地方,也是我想在两故事线之间建立的真实联系。如果你回顾埃舍尔的职业生涯,你会发现他一直被某些概念所吸引,例如在有限空间中表现无限的概念。同时,他似乎受到某种美学准则的引导,通常是一些隐含的严格规则,比如“小正方形保持为小正方形”这一网状结构的理念。

当概念与美学这样结合时,最终结果是埃舍尔的给定作品往往感觉像是一个谜题的解法,但一个甚至不明显存在解法的谜题。我觉得如此发人深省的是,他所确定的这些视觉谜题不仅仅类似于做数学的行为。他直觉地被吸引到的特定结构往往隐藏着非常真实且深刻的数学内涵。在我们的例子中,更深层的结构不仅仅是该作品可以用复函数来描述。我们在这个故事线中触及的思想实际上比你预期的更接近研究前沿。

如果你回顾我们在后半部分的方法,记得它是如何依赖于在复平面上使用这种双重周期模式的——即在两个独立方向上重复的模式。对于像这样具有双重周期的复数函数,实际上有一个专门的名称:它们被称为椭圆函数。在这里解释为什么这些函数如此有用太过冗长,但我想强调的一点是:我在开头引用的那两位数学家——即对该作品进行分析的德·斯密(De Smit)和伦斯特拉(Lenstra)——都是数论学家,而椭圆函数在现代数论中扮演着非常突出的角色,为数学的其他部分提供了一座桥梁。

这至少可以部分解释为什么他们能够审视这件作品并想到构建我们在这里列出的函数。当我看着埃舍尔的作品,无论是《版画展厅》还是许多其他我最喜欢的作品时,我爱这些作品的理由是因为它们在我心中唤起了一个在其他地方很难找到的特定感受。那是一种事物完美契合的感觉。但这并不完全准确,它不仅仅是看到谜题被解决的乐趣;更是对创造这种谜题所需的创意天才的欣赏。我只有在做数学时才能感受到同样的感觉。

因此,艺术家和数学家被相同的结构所吸引——尽管原因完全不同——这向我表明,在他们似乎都被吸引的东西中存在着某种普遍性。