⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sands.m

📁 元胞自动机的matlab程序。 元胞自动机(CA)是一种用来仿真局部规则和局部联系的方法。典型的元胞自动机是定义在网格上的
💻 M
字号:
function sands(N);
% 砂堆规则
%《物理系统的元胞自动机模拟》p31
% N必须大于164. 
if nargin==0;N=250;end
close all;      figure;
set(gcf,'Doublebuffer','on');
D=ones(N);        D1=D;
[X,Y]=meshgrid(1:N);
Z=2*X-Y;p=fix(9.5*N/21);
D(Z>p & Z<9+p)=0;
D(fix(end/2)+1:end,:)=1;
D=min(D,flipud(D).*D1);
D=min(D,fliplr(D).*D1);
D(end,fix(end/4.13):end-fix(end/4.13))=0;
D(end-1,fix(end/4.12):end-fix(end/4.12))=0;
D(end-2,fix(end/4.1):end-fix(end/4.1))=0;
% imshow(D,[])
% 以上是生成装砂的瓶子
B=ones(N);   B(Z>9+p)=0;
B(fix(end/2)+1:end,:)=1;
B(:,fix(end/2)+1:end)=1;
B=min(B,fliplr(B));
B(1:3,:)=1;
set(gcf,'Doublebuffer','on');
imshow(B,[]);
k=1;
while k;
    B=duisha(D,B);
    Bk=min(D,B);
    imshow(Bk,[])
end
function Y=duisha(D,B);
Dq=10*(1-D);
Bg=1-B+Dq;
% 研究砂子下落
S=zeros(size(B));
S1=S;
S2=S;
S(2:end,:)=Bg(2:end,:)-Bg(1:end-1,:);
S1(S==-1)=1;
S2(1:end-1,:)=S1(2:end,:);
Bg(S1==1)=~Bg(S1==1);
Bg(S2==1)=~Bg(S2==1);
% 研究砂子倾倒
clear S
clear S1
clear S2
S=zeros(size(B));
S1=S;
S2=S;
S(1:end-1,2:end-1)=Bg(1:end-1,2:end-1)+Bg(2:end,2:end-1)-Bg(2:end,1:end-2);
S1(S==2)=1;
S2(2:end,1:end-2)=S1(1:end-1,2:end-1);
Bg(S1==1)=0;
Bg(S2==1)=1;
clear S
clear S1
clear S2
S=zeros(size(B));
S1=S;
S2=S;
S(1:end-1,2:end-1)=Bg(1:end-1,2:end-1)+Bg(2:end,2:end-1)-Bg(2:end,3:end);
S1(S==2)=1;
S2(2:end,3:end)=S1(1:end-1,2:end-1);
Bg(S1==1)=0;
Bg(S2==1)=1;
Y=(1-Bg).*D;
end
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -