C#繪圖實現元胞自動機之生命的遊戲(分形之美)

某次計算機仿真比賽之前看到到這個東西,想試一試,於是用c#實現了一下,結果令人很震撼!

看看效果:

      

  

先介紹以下元胞自動機的原理:

細胞自動機(Cellular Automata,簡稱CA)、也稱爲元胞自動機或者格點自動機。它是一個空間離散、時間離散、狀態離散的模型。形象地說,它是由大量簡單的、具有局部相互作用的基本構件(細胞)所構成的。在每一仿真時鐘內,各個細胞按照自身及與它直接相鄰的細胞在這一時刻的狀態和一定的局部規則來確定自己在下一仿真時鐘的狀態。

細胞自動機起源於生物體發育中細胞的自我複製。
20世紀50年代初,現代計算機的創始人馮·諾依曼(von Neumann)曾希望通過特定的程序在計算機上實現類似於生物發育中細胞的自我複製。由於當時電子管計算機的限制,他提出了一種簡單的模式:把一個長方形平面劃分爲若干格網格.每一個格點表示一個細胞或系統的基元。他們的狀態賦值爲01在事先設定的規則下,細胞的演化就可以用網格中的空格或實格的變動來描述.這就是細胞自動機的雛形。在von Neumann逝世之後長達十多年的時間裏,這一開創性的工作幾乎完全停止了,至到1970年劍橋大學的John H. Conway編制了一個名爲“生命的遊戲”〔TheGame of Life)的程序,並由科學美國人的數學遊戲專欄介紹到全世界,才使CA引起了人們的廣泛關注與重視。

再來說說生命的遊戲,先看程序界面:




這裏是以屏幕上每個像素代表一個細胞,細胞有生和死兩種狀態。最原始的規則是
  • 一個活着的細胞如果周圍有超過三個活着的鄰居則死去;
  • 一個死去的細胞只有在剛好有兩個活着的鄰居才重生;

此時細胞的出生和死亡趨向無序。形成圖中所示的混亂場景。統計信息顯示,此時的細胞數目趨於恆定:



運行是還可以調整參數,會影響到細胞的數目變化,這裏就不一一列舉了。下面來看幾個比較極端的例子:
運行後將死亡率降爲0,調整重生數目讓細胞鋪滿所有單元;
然後將出生率降爲0;
調整參數:當細胞數目超過4個時,死亡率爲100%;(這時就只剩下4個角的四個細胞存在了)
接着講死亡率降爲0,出生率加滿100%,改變出生規則爲1個或n個,你將看到無比美妙的圖案。圖的樣式隨n的不同而不同,中途可以繼續改變參數,圖案將千變萬化。

分形魅力盡顯於此!!

程序及源代碼:點此下載






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章