分形 · 迭代函数系统

混沌游戏

混沌游戏让一个点一次又一次朝随机选出的顶点走固定的一段;只要每个顶点都有机会,落点几乎必然铺出同一个自相似的图形。

混沌游戏与本页画面

混沌游戏每掷一次,就让点从当前位置向随机选出的一个顶点v1,…,vNv_1, \dots, v_N走全程的r。换句话说,每一掷都用一次映射

fi(x)=vi+s (x−vi),s=1−r,f_i(x) = v_i + s\,(x - v_i), \qquad s = 1 - r,

它把平面朝viv_i缩成s倍。龙和蕨叶用的则是仿射映射fi(x)=Aix+bif_i(x) = A_i x + b_i。在这一页,你可以移动顶点、调r、限制下一掷、改各映射的机会,看骰子能画出哪些图形。

画面数的是落点:一个像素里落下的点越多,颜色就越浓。“最后一次”按每个落点最后一次掷到的顶点或映射上色,“前一次”按再前一次。颜色混在一起的地方,是不同颜色的落点落进了同一个像素。

为什么每一局都画出同一个图形?先看没有记忆的掷法。每个映射都会缩短距离,所以按同一串掷法走的两个点越来越近。恰好有一个非空紧集K由它自己的副本组成:

K=f1(K)∪f2(K)∪⋯∪fN(K).K = f_1(K) \cup f_2(K) \cup \dots \cup f_N(K).

K上的点不论掷到什么都还在K上,所以这一局的点到K的距离趋于零,起点就被忘掉了。

最近k掷把点带到K的某个小副本附近,更早的掷只决定它在这一份附近的哪里。所以“最后一次”显出N份,“前一次”显出N2N^2个更小的份,每一份都是整幅图经过映射得到的副本。只要每个映射都有机会,几乎必然地,任何一串有限的掷法迟早都会出现,点也就会靠近K的每一处。复印机根本不用骰子:它把整个图形缩成N份放好,再重复;从包住图形的外形或兔子出发,都会逼近同一个K。兔子看得出映射有没有转、有没有翻。

顶点的凸包是多边形,且它的N份至多沿边相接、内部互不重叠时,图形的维数是

D=log⁡Nlog⁡(1/s).D = \frac{\log N}{\log (1/s)}.

r = 1/2的三角形D=log⁡3/log⁡2≈1.585D = \log 3/\log 2 \approx 1.585,r = 2/3的地毯是log⁡8/log⁡3≈1.893\log 8/\log 3 \approx 1.893。各份重叠时,这个数只是上界,页面不给维数。各份盖满整个多边形时,多边形本身就由它的副本组成,由唯一性,它就是图形:实心的。

选“不连续同一个”或“不选相邻”时,下一掷取决于上一掷。相邻按顶点的编号算,拖动顶点不会重新编号。图形要按最后一次分成几块,每一块是允许接在它前面的那几块的副本。所以限制会改变形状本身:r = 1/2时,不连续同一个的正方形不再是实心的,而是维数log⁡3/log⁡2\log 3/\log 2的分形。

只要每个映射都有机会,K就与概率无关。概率只决定落点在K上怎样分布。蕨叶用“按面积权重”来画;改成“均等”,叶子形状不变,只是茎上的点多了,叶尖的点少了。

Barnsley的《Fractals Everywhere》(1988)让用随机掷点画出这类图形的办法以“混沌游戏”之名广为人知。

值得注意

  • 名字里的“混沌”不是混沌动力学。按同一串掷法走的两个点越来越近,正好和“对初值敏感”相反;随机只来自骰子。
  • 图形是极限。多少个点、复印多少轮,都只是近似。
  • 颜色浓淡是落点的多少,不表示图形在那里“更厚”;光晕只是显示效果。

相关概念