Processing #P5JS #CellularAutomaton #LifeGame
二維 CA 會引入額外的複雜度,每個細胞有更多的鄰居,同時也為更多的應用場景開啟了大門.
首先,我們需要一個二細胞維矩陣,而不是一行細胞
狀態依然是 0 或 1,代表「死」或「生」
現在我們有 9 個鄰居細胞
在只有 3 個鄰居時,狀態組合可以用一個 3 位的二進制數表示,是 8 種可能
現在有 9 個鄰居,有 512 種可能的狀態組合,分別定義規則是不可行的
規則
生命遊戲根據鄰居的一般特征制定了一套規則:
- 死亡:活著的細胞在一下情況下回變成死亡狀態:
- 群體過剩:細胞有 4 個及以上的鄰居處於活著的狀態
- 孤獨:活著的鄰居數少於等於 1 個
- 新生:處於死亡的細胞,如果周圍剛好有 3 個活著的鄰居,則會變為活著的狀態
- 靜止:其他情況
- 保持活著:周圍有 2 個或 3 個活著的鄰居
- 保持死亡:周圍活著的鄰居不等於 3
一些圖案
生命遊戲具有一個有趣的特性:某些初始圖案能帶來奇妙的結果:
- 以下圖案會保持靜止,不會發生任何改變
- 在兩個狀態之間交替出現
- 發生移動(移動是生死交替的結果,細胞本身沒有移動),一般稱為「飛船」
四個「滑翔機」
滑翔機的四個階段
- 需要大量迭代才能收斂的圖案稱為「瑪士撒拉 Methuselah」,下圖為一個簡單的瑪士撒拉,在收斂之前的壽命為 23314 次迭代
編寫生命遊戲
在生命遊戲中,所有規則都只涉及 “活著” 的細胞數量,因此引入一個鄰居計數器變數,每次發現一個”活著”的鄰居,就遞增這個變量,從而得到”活著”的鄰居的總數
傳統 CA 的變化
- 非矩形網格
- 概率性: CA 的規則不一定產生確定的結果
- 連續的: 細胞的狀態可以是 0~1 的浮點數
- 圖像處理: 大部分圖像處理算法和 CA 規則類似
- 歷史性: 我們記錄細胞的當前狀態和上一代狀態, 可以用數組存放更多的歷史狀態
- 移動細胞: 細胞的位置可以使不固定的, 可以在熒幕上移動
- 嵌套: 複雜系統還有一個特性, 即系統之間可以互相嵌套. 我們的現實世界就具有這樣的特性: 城市是由人組成的複雜系統, 人是由器官組成的複雜系統, 器官是由細胞組成的複雜系統…