您的位置:首页 > 编程语言 > C#

C#绘图实现元胞自动机之生命的游戏(分形之美)

2014-08-12 15:35 1441 查看
某次计算机仿真比赛之前看到到这个东西,想试一试,于是用c#实现了一下,结果令人很震撼!

看看效果:


    

  


  


先介绍以下元胞自动机的原理:

细胞自动机(Cellular Automata,简称CA)、也称为元胞自动机或者格点自动机。它是一个空间离散、时间离散、状态离散的模型。形象地说,它是由大量简单的、具有局部相互作用的基本构件(细胞)所构成的。在每一仿真时钟内,各个细胞按照自身及与它直接相邻的细胞在这一时刻的状态和一定的局部规则来确定自己在下一仿真时钟的状态。

细胞自动机起源于生物体发育中细胞的自我复制。20世纪50年代初,现代计算机的创始人冯·诺依曼(von
Neumann)曾希望通过特定的程序在计算机上实现类似于生物发育中细胞的自我复制。由于当时电子管计算机的限制,他提出了一种简单的模式:把一个长方形平面划分为若干格网格.每一个格点表示一个细胞或系统的基元。他们的状态赋值为0或1在事先设定的规则下,细胞的演化就可以用网格中的空格或实格的变动来描述.这就是细胞自动机的雏形。在von
Neumann逝世之后长达十多年的时间里,这一开创性的工作几乎完全停止了,至到1970年剑桥大学的John H. Conway编制了一个名为“生命的游戏”〔TheGame
of Life)的程序,并由《科学美国人》的数学游戏专栏介绍到全世界,才使CA引起了人们的广泛关注与重视。

再来说说生命的游戏,先看程序界面:



这里是以屏幕上每个像素代表一个细胞,细胞有生和死两种状态。最原始的规则是

一个活着的细胞如果周围有超过三个活着的邻居则死去;

一个死去的细胞只有在刚好有两个活着的邻居才重生;

此时细胞的出生和死亡趋向无序。形成图中所示的混乱场景。统计信息显示,此时的细胞数目趋于恒定:



运行是还可以调整参数,会影响到细胞的数目变化,这里就不一一列举了。下面来看几个比较极端的例子:

运行后将死亡率降为0,调整重生数目让细胞铺满所有单元;

然后将出生率降为0;

调整参数:当细胞数目超过4个时,死亡率为100%;(这时就只剩下4个角的四个细胞存在了)

接着讲死亡率降为0,出生率加满100%,改变出生规则为1个或n个,你将看到无比美妙的图案。图的样式随n的不同而不同,中途可以继续改变参数,图案将千变万化。

分形魅力尽显于此!!

程序及源代码:点此下载









内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息