Matlab中每行生命游戏代码的注释
清楚了吗?全部
接近?全部
m = 30n = 30p = .7h = 100;
%%
%生成一个30*30的矩阵a,a的值根据随机数是否大于阈值0.7确定为1或0。
为了什么?x=1:m
为了什么?y=1:n
r =兰特(1);%rand生成从0到1(不包括1)的随机数。
如果?r & gtp
a(x,y)= 1;
不然呢?a(x,y)= 0;
结束
结束
结束
%%
为了什么?x=1:m
为了什么?y=1:n
如果?a(x,y)==1
FX =;fy=[0,0,n,n];fill(fx,fy,' k '),hold?在%上画一个30*30的黑色背景
为了什么?x=2:m-1
为了什么?y=2:n-1
b(x,y)=a(x-1,y-1)+a(x-1,y)+a(x,y-1)+a(x,y+1)+a(x,y+1)+a(x+1,y-1)+a(x+65438
%根据生命游戏规则,取矩阵A的元素(x,y)周围八个元素的值之和,因为最外一圈元素周围没有相邻的八个元素。
%所以我们不考虑x和y的取值范围是2:m-1和2:n-1。
如果?b(x,y)==2,c(x,y)=a(x,y);
%如果(x,y)周围有两个1的细胞,也就是游戏意义上的两个活细胞,那么这个细胞的下一次生死与最初的生死有关。
埃尔瑟夫?b(x,y)==3,c(x,y)= 1;
%如果(x,y)周围有三个1细胞,也就是游戏意义上的两个活细胞,那么这个细胞在下一个时刻会存活(这里我假设1是活的)。
不然呢?c(x,y)= 0;
%如果(x,y)周围的活细胞不是这两个值,也就是太多或者太少,那么这个细胞在下一个时刻就会死亡(这里我假设0是死亡)。
结束
结束
结束
%%
c(1:m,1)=a(1:m,1);
c(1:m,n)=a(1:m,n);%两边加两列
c(1,1:n)=a(1,1:n);%我感觉这里应该加上下两行,但是原程序没有。否则,缺少的部分为零,显示始终为黑色。
c(m,1:n)=a(m,1:n);%注意,矩阵表示和绘制相当于矩阵转置,如果矩阵上下两行缺失,左右两边显示为黑色。
为了什么?x=1:m
为了什么?y=1:n
如果?c(x,y)==1
fx=[x-1,x-1,x,x];fy=[y-1,y,y,y-1];fill(fx,fy,' g '),hold?在
其他
结束
结束
结束
%画c,如上,画a。
暂停(. 05)%暂停0.05秒,观察变化过程。
a = c;%将C赋给A,即此时的C视为前一时刻的A,循环继续绘制。
结束
%这个过程是生成一个随机的30*30的矩阵A,根据生命游戏规则计算并显示矩阵A的中间29*29部分,循环100次。
%可以发现图形的最外圈是不变的。