Gointerface接口声明实现及作用详解
269
2022-09-08
【元胞自动机】基于元胞自动机实现六边形网格含Matlab源码(matlab关于元胞自动机的编程)
1 简介
元胞自动机不仅是理论计算机科学领域的一个重要的计算模型 ,而且可视为一无限维的离散动力系统 ,被广泛应用于自然科学和社会科学各领域的复杂性的研究中 ,是一个重要的研究方法和工具.该文以Matlab为开发工具 ,开发了元胞自动机的可视模型 ,为其在各个领域的复杂性研究提供了一个简易,可行的计算机仿真工具
2 部分代码
function plotSixGrid(A,L,m,n,RGB,gcf,HL,HW)%PLOTSIXGRID 绘制六边形网格% A[X,Y] 中心坐标% L 边长% m 行数% n 列数% gcf 窗口句柄% RGB 填充颜色 0 Black 1 White% HL 紧邻方式 0 行紧邻 1列紧邻% HW 奇偶行突出 0 奇数行突出 1 偶数行突出if HW>0 HW=1;else HW=0;end%排除错误输入if HL>0 HL=1;else HL=0;end%排除错误输入figure(gcf)hold onaxis offW=2; % 线框宽度Ro3=1.732050807568877;% sqrt(3);t=[0, 1.047197551196598, 2.094395102393195, ... 3.141592653589793, 4.188790204786391,... 5.235987755982989, 6.283185307179586]; % linespace(0,2*pi,7);% 原点坐标存在if length(A)==2 % 网格平铺 X_L=A(1)+(0:L:L*m); Y_L=A(2)+(0:L:L*n); % 遍历 for i=1:m for j=1:n X=X_L(i); Y=Y_L(j); % 根据网格类型,将平铺坐标映射为六边形网格坐标 switch HL case 0 x = L*sin(t)+Ro3*(X-1)+L*Ro3*3/4+L*Ro3*1/4*(-1)^(j+HW); y = L*cos(t)+Y*3/2; case 1 % 旋转30° t=t+1.047197551196598; x = L*sin(t)+X*3/2; y = L*cos(t)+Ro3*(Y-1)+L*Ro3*3/4+L*Ro3*1/4*(-1)^(i+HW); otherwise x = L*sin(t)+Ro3*(X-1)+L*Ro3*3/4+L*Ro3*1/4*(-1)^(j+HW); y = L*cos(t)+Y*3/2; end % 绘制六边形线框 % 在大规模绘图中可能会增加计算开销 plot(x,y,'c','Linewidth',W); % 填充颜色 try Color=RGB(i,j); % Color=[(sin(i/10)+cos(j/8)+2)/4 0 (cos(j/8-4.6)+sin(i/10)+2)/4] % 填充函数开销异常巨大,尽量小规模测试 fill(x,y,[Color Color Color]) catch fill(x,y,[1,0,0])% 异常将显示为红色 end end endendend
3 仿真结果
4 参考文献
[1]付玉慧, 马鹏森. 基于六边形元胞自动机的船舶追越过程模拟研究[J]. 重庆交通大学学报:自然科学版, 2021, 40(9):6.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~