探索列维 C 曲线
列维 C 曲线:一条直线如何长成复杂的分形世界?
如果给你一条直线,然后告诉你,不需要增加任何复杂规则,只要不断重复一个简单的“折叠”,这条直线最终就能变成一个复杂的分形图案,你可能很难想象它最后会是什么样子。
但这正是 列维 C 曲线 最迷人的地方。
它从一条普通的直线开始,通过一个非常简单的生成规则不断递归,最终形成复杂、密集、充满分枝的曲线。而且你还可以亲自改变它的折叠角度,看看一个小小的角度变化,最终会把整条曲线带向怎样完全不同的形态。
一切从一条直线开始
列维 C 曲线 的起点非常简单,只有一条直线段。这条最初的线段有一个专门的名字:起始元,你可以把它理解成整个分形的种子。
现在还没有复杂的图案,没有树枝,没有分叉,甚至还没有所谓的“C”,只有一条普通的直线。
接下来,需要一个“生成元”
如果只有一条直线,什么也不会发生。所以我们需要再定义一个东西:生成元。生成元规定了以后遇到一条线段时,应该用什么样的形状把它替换掉。
对于 列维 C 曲线 来说,生成元由两条等长的线段组成,这两条线段分别向原来的方向偏转一定角度。
假设原来的线段是水平的,果我们把折叠角度设为 45°,那么生成元中的两条线段分别向两侧偏转 45°。于是,一条直线段,被替换成一个直角折线。因为 +45° −(−45°)= 90°,所以两条新的线段彼此垂直。可以把它想象成一个小小的 V 形折叠单元。
神奇的地方来了
现在我们已经有了 起始元 和 生成元,接下来只需要执行一个动作:用生成元替换起始元。
于是,一条线段变成两条线段。但是我们不会停下来,因为现在出现了两条新的线段。那么,再用同一个生成元替换这两条线段。于是两条线段变成四条线段。再下一次,四条变成八条。然后,十六条,三十二条,……
这个过程叫做 递归,意思其实并不神秘:对刚刚产生的新东西,再执行一次原来的规则。
我们没有创造新的规则,从第一步到最后一步,规则始终完全一样。每一条线段都使用同一个生成元,然后,新产生的每一条线段,继续使用同一个生成元,如此不断重复。
第一次,1 条线段。第二次,2 条。第三次,4 条。第四次,8 条。第五次,16 条。每增加一次迭代,线段数量都会翻倍,而每一条线段又会继续发生同样的变化。于是,原本简单的直线,开始出现越来越多的弯折。继续下去,整个图案越来越复杂。
45°折叠角度并不是唯一的选择
经典的 列维 C 曲线 通常使用 45° 的生成元,但我们并不一定非要使用这个角度。
如果把角度改成 30°,每条新线段相对于原方向偏转 30°,于是两条新线段之间形成 60° 的夹角。
38°,两条线段分别偏转 ±38°,于是它们之间形成 76° 的夹角。
45°,两条线段分别偏转 ±45°,于是形成 90° 的直角。
一个小小的角度变化,会发生什么?
现在可以想象:你只改变了一点点参数,从 45° 改成 38°,生成元的形状只发生了一点变化。但是别忘了,这个生成元会被重复使用很多很多次。第一代,变化很小。第二代,变化开始积累。第三代,差异更加明显。继续迭代,最终的整个图案,可能已经和原来的形状完全不同。
这就是递归系统非常有趣的一面,一个很小的局部变化,可以在不断重复之后,产生巨大的整体差异。
可以把整个 列维 C 曲线 想象成一台折叠机器
机器最开始拿到一条直线。这就是起始元。然后机器拿出一个固定的生成元,把这条直线替换掉。
接着,机器检查:“现在出现了几条线段?”然后对每一条线段,继续使用同一个生成元。然后再检查,再替换,再检查,再替换。机器就这样不停工作,最终,一条直线被“折叠”成了一个复杂的分形世界。
这和真正的折纸不一样,这里的“折叠”只是帮助我们理解的直观比喻。实际上,计算机并没有真的把一条纸折起来。它做的事情是:按照生成元定义的几何规则,把每条线段替换成两条新的线段。
所以更加准确地说,起始元被生成元替换,对新的线段再次替换,不断递归,这才是 列维 C 曲线 真正的生成过程。
为什么它会越来越复杂?
仔细想想,我们从头到尾都没有增加什么复杂的数学规则。只有一个起始元、一个生成元、一个折叠角度和一个递归过程,就这些。
可是当递归次数不断增加,1 → 2 → 4 → 8 → 16 → 32 → ……,线段数量越来越多,它们的方向不断改变,它们又继续产生新的线段。于是,复杂性不是被直接设计出来的,而是在简单规则不断重复的过程中自己出现的。这就是分形最迷人的地方之一。
当 列维 C 曲线 迭代到较高阶时,大量线段开始聚集在一起。从远处看,它可能让你联想到树枝,甚至像植物的分枝。但这只是视觉上的相似,它并没有使用任何植物生长规则,没有树干,没有叶子,没有阳光,没有水分,也没有生长速度。它只是执行 生成 + 递归,仅此而已。
这也正是数学图形有趣的地方:一个完全抽象的几何规则,也可能产生非常“自然”的视觉效果。
列维 C 曲线 和 巴恩斯利蕨 有什么区别?
这两个图形都可能让人联想到植物,但它们背后的思路完全不同。
巴恩斯利蕨 专门设计数学变换,让不断迭代的点逐渐形成蕨类植物的形态。所以可以说:它是在用数学模拟自然。
列维 C 曲线 完全没有模拟植物,它只是一条线 → 生成元 → 递归 → 越来越复杂的曲线,最后恰好看起来有点像树枝。所以,它是简单规则自己长出了像植物的结构。
列维 C 曲线 和 分形龙 有什么区别?
它们都从一条线开始,也都通过递归产生复杂图案,但核心规则不同。
分形龙 更加接近 不断按照特定规则折叠和转向,最终形成复杂的龙形分形。
列维 C 曲线 核心则是 使用一个固定的生成元,不断替换每一条线段,尤其是经典的 45° 情况:两条新线段彼此垂直。
所以可以简单地理解:分形龙:不断折叠出“龙”,列维 C 曲线:不断用同一个生成元折叠出“C”。
和 科赫雪花 又有什么不同?
你可能还会发现,科赫雪花 也使用了非常类似的思想,它同样可以理解为 起始元 → 生成元 → 迭代,但 生成元 不一样。
科赫雪花 让一条线段中间长出一个小三角形,于是最终形成雪花状边界。
列维 C 曲线 让一条线段变成两条具有一定夹角的线段,于是最终形成复杂的 C 形分形曲线。
所以你可以把它们理解成 同一种“递归机器”,换了不同的生成元,就会产生完全不同的世界。
从 30° 到 45°,看看数学如何“生长”
现在,不妨自己试试把折角调到 30°,然后增加迭代次数。再试 38°,最后 45°。
你会发现,生成元,就是右上角那个图案,只是发生了一点点变化,但是随着递归次数增加,整个图形的变化会越来越明显。
这就像给一条“数学生长规则”设置了不同的基因:规则没有改变,只有一个参数改变了,但经过足够多次重复以后,最终的形态却可以截然不同。
从数学上来说,这个过程可以不断继续。每一代,线段更多,线段更短,结构更复杂。理论上可以一直进行下去。
但计算机屏幕当然不可能真正绘制无限次。所以我们实际看到的是,某一个有限迭代次数的近似结果。例如,5 次迭代和 10 次迭代,已经会有非常明显的视觉差异。如果继续提高,15 次迭代,20 次迭代,计算量也会迅速增加。
因此,你现在看到的每一幅 列维 C 曲线,都可以理解为:无限分形在某一个阶段的“快照”。
列维 C 曲线 的真正魅力
一条直线,最后去了哪里?
最开始,一条直线,没有人会觉得它有什么特别。然后,折一次,再折一次,再折一次,……
每一次,都只是执行同一个简单规则。但最终,你面对的已经不是一条直线,而是一幅充满细节的复杂分形图案。
更有意思的是,你甚至可以改变那个小小的折叠角度,30°,38°,45°,甚至其他角度,然后看看:同一条直线,究竟还能长成什么样子?
列维 C 曲线 最值得探索的,并不是某一个固定的最终图案,而是 从一个极其简单的起点,到一个极其复杂的结果,中间发生了什么?
它只需要一个起始元,一个生成元,一个折叠角度,以及一次又一次地重复,然后,复杂性就出现了。
这也是分形世界最令人着迷的地方:复杂,不一定需要复杂的规则,有时候,只需要一个简单的规则,并且让它重复足够多次。
继续探索无限微观
列维 C 曲线 只是分形世界中的一种可能。
如果你喜欢这种 简单规则 → 不断递归 → 复杂图案 的数学图形,还可以继续探索 分形龙,一条简单的线,经过不断折叠,最终形成复杂的分形结构。或者 科赫雪花,一个简单的三角形,不断让边缘长出新的细节,最终形成一片无限复杂的数学雪花。或者曼德博集合,一个简单的复数迭代,却产生令人难以置信的无限细节。以及 阿波罗尼奥斯圆填充,从几个相切的圆开始,不断向空隙中加入更小的圆,让结构无限延伸。
它们使用的规则各不相同,但都在讲述同一个故事:一个简单的规则,重复下去,究竟能够创造出多么复杂的世界?。而 列维 C 曲线 给出的答案是:一条直线,也许比你想象的更有可能“长出”一个世界。
你还可以继续欣赏更多奇妙的数学图形,或者查看维基百科上更多关于 列维 C 曲线 的介绍。