第二代和第一代有些许不同,每体积沙子被雨水打到后会增加一定量的含水量,当最上面一层的含水量平均值大于某个值得时候,最上面一层沙子就会塌陷。

不多说啥了,看代码(个人练习记录,大佬轻喷)

clear all;
% 设置GUI按键
plotbutton=uicontrol('style','pushbutton','string','运行', 'fontsize',12, 'position',[150,400,50,20], 'callback', 'run=1;');
erasebutton=uicontrol('style','pushbutton','string','停止','fontsize',12,'position',[250,400,50,20],'callback','freeze=1;');
quitbutton=uicontrol('style','pushbutton','string','退出','fontsize',12,'position',[350,400,50,20],'callback','stop=1;close;');
%设置元胞大小
n=100;
C = zeros(n,n);
%设置种类 0:空气 1:沙子 2:雨滴
ca= zeros(n,n);
wa=zeros(n,n);%含水量
%沙堆和雨滴的数量
numsand=zeros(10000,1);
numrain=zeros(10000,1);
numceng=zeros(10000,1);
time=0;
%设置沙堆
for i=10:90for j=1:nif i<=35if j<=sqrt(i-10)*5ca(j,i)=1;wa(j,i)=10;endelseif i<=65if j<=25ca(j,i)=1;wa(j,i)=10;endelseif j<=sqrt(90-i)*5ca(j,i)=1;wa(j,i)=10;endendend
end
%绘制沙堆
for i=2:98for j=3:97k=0;for i1=1:3for j1=1:3if ca(j+j1-2,i+i1-2)==1k=k+1;endendendif k==1||k==2||k==3C(j,i)=60;elseif k==4||k==5||k==6C(j,i)=57;elseif k==7||k==8||k==9C(j,i)=55;endend
endimage(C)
set(gca,'YDir','normal')
stop= 0; run = 0;freeze = 0;%             for i1=2:8
%                 C(100,i1*10)=20;
%             endwhile stop==0if run==1%沙堆重绘       颜色由上方五个决定for i=2:98for j=3:97k=0;for i1=1:3for j1=1:3if ca(j+j1-2,i+i1-2)==1k=k+1;endendendif k==1||k==2||k==3C(j,i)=60;elseif k==4||k==5||k==6C(j,i)=57;elseif k==7||k==8||k==9C(j,i)=55;endendend
%模拟雨滴下落及对沙堡的影响for j2=2:100for i2=1:100if ca(j2,i2)==2C(j2,i2)=0;ca(j2,i2)=0;if ca(j2-1,i2)==1    %雨滴遇到沙砾时wa(j2-1,i2)=wa(j2-1,i2)+15; %沙砾含水量增加,预定增加15%%判断含水量的变化会不会冲刷沙堡形状sum=0;k_1=0;for i_1=1:100if ca(j2-1,i_1)==1sum=sum+wa(j2-1,i_1);k_1=k_1+1;endendavg=sum/k_1;if avg>=55for i_1=1:100ca(j2-1,i_1)=0;end%填入塌陷的沙砾num_sand=k_1;for j_2=1:100for i_2=2:50if num_sand>0if ca(j_2,i_2+1)==1&&ca(j_2,i_2-1)==0ca(j_2,i_2)=1;num_sand=num_sand-1; endendendfor i_2=98:-1:51if num_sand>0if ca(j_2,i_2-1)==1&&ca(j_2,i_2+1)==0ca(j_2,i_2)=1;num_sand=num_sand-1; endendendendendelse      %正常下落ca(j2-1,i2)=2;C(j2-1,i2)=20;endendendend%生成雨滴             a=unidrnd(n);C(n,a)=20;ca(n,a)=2;
%数据储存
time=time+1;for j3=1:100for i3=1:100if ca(j3,i3)==1numsand(time)=numsand(time)+1;endendend
numrain(time)=time/(1375-numsand(time));for j_3=1:100if ca(j_3,50)==1numceng(time)=numceng(time)+1;endend%图像更新
image(C)
set(gca,'YDir','normal')if time==3000run=0;end
% run=0;endif freeze==1run = 0;freeze = 0;enddrawnow %更新图窗并处理回调
end

雨水冲刷沙堡模型——matlab元胞自动机(二)相关推荐

  1. 雨水冲刷沙堡模型——matlab元胞自动机

    雨水冲刷沙堡模型,新手练习matlab元胞自动机写的. 这是代码 clear all; % 设置GUI按键 plotbutton=uicontrol('style','pushbutton','str ...

  2. 【Matlab元胞自动机】元胞自动机大型商场人流疏散【含源码 665期】

    一.代码运行视频(哔哩哔哩) [Matlab元胞自动机]元胞自动机大型商场人流疏散[含源码 665期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]贺琳,聂化 ...

  3. 【元胞自动机】基于matlab元胞自动机3D森林火灾模型【含Matlab源码 656期】

    ⛄一.元胞自动机简介 1 元胞自动机发展历程 最初的元胞自动机是由冯 · 诺依曼在 1950 年代为模拟生物 细胞的自我复制而提出的. 但是并未受到学术界重视. 1970 年, 剑桥大学的约翰 · 何 ...

  4. 【元胞自动机】基于matlab元胞自动机模拟SEIR传播模型和采取隔离措施的SEIR模型【含Matlab源码 2181期】

    ⛄一.元胞自动机简介 1 元胞自动机发展历程 最初的元胞自动机是由冯 · 诺依曼在 1950 年代为模拟生物 细胞的自我复制而提出的. 但是并未受到学术界重视.1970 年, 剑桥大学的约翰 · 何顿 ...

  5. 【元胞自动机】基于matlab元胞自动机双车道交通流模型含靠右行驶【含Matlab源码 231期】

    ⛄一.元胞自动机简介 1 元胞自动机发展历程 最初的元胞自动机是由冯 · 诺依曼在 1950 年代为模拟生物 细胞的自我复制而提出的. 但是并未受到学术界重视. 1970 年, 剑桥大学的约翰 · 何 ...

  6. 【元胞自动机】基于matlab元胞自动机多车道信号交叉口仿真【含Matlab源码 818期】

    ⛄一.元胞自动机简介 1 元胞自动机发展历程 最初的元胞自动机是由冯 · 诺依曼在 1950 年代为模拟生物 细胞的自我复制而提出的. 但是并未受到学术界重视. 1970 年, 剑桥大学的约翰 · 何 ...

  7. matlab 元胞自动机

    用MATLAB实现元胞自动机的事例 file 1:life.m %% 初始化 m = 50; X = zeros(m,m); X(25,25) = 1;n = [m 1:m-1];e = [2:m 1 ...

  8. 【元胞自动机】基于matlab元胞自动机模拟交通路况(含超车)【含Matlab源码 2389期】

    ⛄一.元胞自动机简介 1 元胞自动机发展历程 最初的元胞自动机是由冯 · 诺依曼在 1950 年代为模拟生物 细胞的自我复制而提出的. 但是并未受到学术界重视. 1970 年, 剑桥大学的约翰 · 何 ...

  9. MATLAB元胞自动机报告,元胞自动机概述与MATLAB实现

    什么是元胞自动机? 元胞自动机(cellular automata,CA) 是一种时间.空间.状态都离散,空间相互作用和时间因果关系为局部的网格动力学模型,具有模拟复杂系统时空演化过程的能力.它能构建 ...

最新文章

  1. cogs 362. [CEOI2004]锯木厂选址
  2. R语言ggplot2可视化使用ggridges包可视化山脊图(Ridgeline Plots):山脊图(Ridgeline Plots)应用场景、受试者口服茶碱的之后观察茶碱的浓度变化的山脊图
  3. python学习干货教程(10):列表
  4. Executor介绍
  5. 多线程共享内存的问题
  6. GT考试(bzoj 1009)
  7. subList?? subString???
  8. java中,剩下的这两个内部类不太好理解!
  9. java中的split使用的是正则表达式
  10. oracle单行函数 之 字符函数
  11. 数据库系统概念(中文第六版):杨冬青-电子书
  12. icem合并面网格_ICEM CFD混合网格
  13. 微信小程序开发——单行文本溢出显示省略号
  14. 信息系统项目管理师学习笔记13-项目合同管理
  15. 【071】张大妈计算器-工资计算器及各地薪资报告
  16. BigDecimal实现加减乘除
  17. 缺省值及属性(Python)
  18. 不会编程,别着急!免编程工具助你快速开发App
  19. buck型三相PFC
  20. 图书馆馆藏书籍管理功能

热门文章

  1. mybatis plus 执行 原始的sql 语句
  2. 商业银行业务学习(一)
  3. el-date-picker 日期选择器-样式大小设置
  4. 调整el-datetimepicker时间选择器的样式大小
  5. VsCode 语音注释, 让信息更丰富 (上)
  6. panic: Error 1045: Access denied for user ‘root‘@‘117.61.242.215‘ (using password: YES)
  7. 搜狗网盟CTR预估的进化之路
  8. 基于Matlab仿真无源雷达传感器和雷达干扰(附源码)
  9. 标题:子网掩码划分,交换机,SecureCRT命令行
  10. 就在刚刚,陆奇博士演讲《正视挑战把握创业创新机会》