在这篇文章里,我将仔细拆分各个实现过程,不牵扯复杂的定义。
clc
clear
close all
cell=uint8(zeros(256,256));
for i=1:256*256
cell(i)=uint8(randi(256));
end
imshow(cell)
创建一个矩阵,uint8类型,其中uint8()用于类型转换,否则imshow无法识别
之所以这样是为了可以直接绘制灰度图;
可以写的更简洁:
cell=uint8(randi(256,256,256));
imshow(cell)
这张图是随机生成的,杂乱无序,可以设定一定的生成条件,让图片变得平滑;
待定
这个矩阵搭完,就可以开始设定条件让它动起来,像一个自动机器一样;
cell中各个成员的值不发生改变
我们来看怎么去写这些条件
先让这些成员动起来,每成员在一帧画面内只能移动一格,那就出现一个问题,地盘被挤满了,无法挪动,那我们先随机把一部分地方变成空地。
cell(randi(255,1,128*256))=255;
下面是全部实现代码,后续会继续补充,点的移动趋势,点数量和自身值受外力因素的变化
clc
clear
close all
cell=uint8(zeros(256,256));
for i=1:256*256
cell(i)=uint8(randi([0,255]));
end,
cell(randi(256*256,1,256*256))=255;
imshow(cell)
cell2=uint8(zeros(258,258));
cell2(2:257,2:257)=cell;
D=zeros(3,3);
cycle=256;
flag1=0;
imshow(cell2)
while(cycle)
cycle=cycle-1 ;
for i=2:257
for j=2:257
tmp=cell2(i,j);
%创建一个滑块方格,代表点周围可到达点
for p=i-1:i+1
for q=j-1:j+1
if cell2(p,q)==255
D(p-i+2,q-j+2)=0;
else
D(p-i+2,q-j+2)=1;
end
end
end
if D(2,2)==0%如果点本身是空的,则推出
continue
end
[raw,col]=find(D==0);
if(isempty(raw))
continue
end
t=randi(length(raw));
cell2(i,j)=255;
cell2(raw(t)-2+i,col(t)-2+j)=tmp;
end
end
figure(2)
imshow(cell2)
end
效果如下,目前这个效果,可以通过添加场等,模拟一些物理过程