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

某次计算机仿真比赛之前看到到这个东西,想试一试,于是用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的不同而不同,中途可以继续改变参数,图案将千变万化。

分形魅力尽显于此!!

程序及源代码: 点此下载






  • 9
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Matlab是一种功能强大的科学计算软件,可以用于实现元胞自动机(Cellular Automaton)模型。元胞自动机是一种离散的计算模型,由许多简单的单元(元胞)组成,这些元胞根据一组规则进行状态转换和相互交互。 在Matlab中,你可以使用矩阵来表示元胞自动机的状态,并使用循环和条件语句来实现状态转换规则。以下是一个简单的示例代码,演示了如何在Matlab中实现一个基本的元胞自动机模型: ```matlab % 定义元胞自动机的参数 numCells = 100; % 元胞数量 numIterations = 100; % 迭代次数 % 初始化元胞状态 cells = zeros(1, numCells); % 所有元胞的初始状态为0 cells(ceil(numCells/2)) = 1; % 设置中间元胞的初始状态为1 % 迭代更新元胞状态 for iteration = 1:numIterations newCells = zeros(1, numCells); % 创建一个新的状态矩阵 % 更新每个元胞的状态 for i = 1:numCells % 根据规则更新元胞状态 if i == 1 leftNeighbor = numCells; else leftNeighbor = i - 1; end if i == numCells rightNeighbor = 1; else rightNeighbor = i + 1; end % 根据相邻元胞的状态更新当前元胞的状态 if cells(leftNeighbor) == 1 && cells(rightNeighbor) == 0 newCells(i) = 1; else newCells(i) = 0; end end % 更新元胞状态矩阵 cells = newCells; % 可视化当前迭代的元胞状态 plot(cells); axis([1 numCells 0 1]); pause(0.1); end ``` 这段代码实现了一个简单的元胞自动机模型,其中元胞的状态由0和1表示。每个元胞的状态根据其左右相邻元胞的状态进行更新。在每次迭代中,我们通过绘制当前元胞状态的图形来可视化模型的演化过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值