碎形 · 迭代函數系統

混沌遊戲

混沌遊戲反覆將一個點朝隨機選中的頂點移動固定比例的距離;只要每個頂點都有被選中的機會,這些點就幾乎必然會填出同一幅自相似圖形。

這個視覺化中的混沌遊戲

混沌遊戲每擲一次骰子,就讓點朝隨機選出的某個頂點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上的分布。蕨葉採用依面積繪製;改成均等機率,葉子形狀不變,只是莖上的點增加、葉尖的點減少。

Michael Barnsley的Fractals Everywhere(1988)讓這種隨機擲點的繪圖方法以「混沌遊戲」之名廣為人知。

值得注意

  • 這個名稱指的不是混沌動力學。遵循相同擲骰結果的點會逐漸靠近,與對初始條件敏感正好相反。隨機性只來自骰子。
  • 圖形是一個極限。無論落點多少、複製幾輪,都只是近似。
  • 顏色濃淡表示落點多少,不表示圖形在那裡較厚;光暈只是顯示效果。

相關概念