%假设电量充满后,扫地机器人共可移动7200步.
%房间状态为封闭空房间。
%状态设置:
%墙壁为黑色,未清扫处为白色,清扫后为红色。
%状态变化规则:
%1.四周没有墙壁时,以等概率方式移动到周围8个位置之一;
%2.位于墙角时,以等概率方式移动到周围3个位置之一;
%3.位于墙边非墙角时,以等概率方式移动到周围5个位置之一
M=15;%房间大小M行,其中包含了两行墙壁
N=15;%房间大小N列,也包括两列墙
%房间状态初始化
R=ones(M,N);%初始化R房间矩阵
R(1,:)=0;
R(M,:)=0;
R(:,1)=0;
R(:,N)=0;
%R的边界初始化为0
G=R;%G初始化为R
B=R;%B初始化为R
i=unidrnd(M-2)+1;%随机选取初始位置行标
j=unidrnd(N-2)+1;%随机选取初始位置列标
G(i,j)=0;%在G中更新初始点
B(i,j)=0;%在B中更新初始点
ima=cat(3,R,G,B);%ima为R,G,B拼接而成的3维数组
imshow(ima,'InitialMagnification','fit');%初始状态图显示
t=0;
tp=title(['T = ',num2str(t)]); %时间记录,移动一步设置为1.5。
neighbour=[-1 -1;-1 0;-1 1;0 -1;0 1;1 -1;1 0;1 1];%当前位置邻域
%i,j始终表示人所在位置的坐标
for t=1:7200
if 2<i && i<M-1 && 2<j && j<N-1 %人在内部
r=unidrnd(8);
elseif i==2 && j==2 %人在左上墙角
r=randsrc(1,1,[5 7 8]);
elseif i==2 && j==N-1 %人在右上墙角
r=randsrc(1,1,[4 6 7]);
elseif i==M-1 && j==2 %人在左下墙角
r=randsrc(1,1,[2 3 5]);
elseif i==M-1 && j==N-1 %人在右下墙角
r=randsrc(1,1,[1 2 4]);
elseif i==2 && 2<j && j<N-1 %人在上墙边非墙角
r=randsrc(1,1,[4 5 6 7 8]);
elseif i==M-1 && 2<j && j<N-1 %人在下墙边非墙角
r=randsrc(1,1,[1 2 3 4 5]);
elseif 2<i && i<M-1 && j==2 %人在左墙边非墙角
r=randsrc(1,1,[2 3 5 7 8]);
else 2<i && i<M-1 && j==N-1 %人在右墙边非墙角
r=randsrc(1,1,[1 2 4 6 7]);
end
i=i+neighbour(r,1); %更新位置坐标
j=j+neighbour(r,2); %更新位置坐标
G(i,j)=0;
B(i,j)=0; %更新当前人所在位置为红色
ima=cat(3,R,G,B);%更新ima数组
imshow(ima,'InitialMagnification','fit');
hold on;
[xt, yt] = meshgrid(0.5:M+0.5,0.5:N+0.5);%生成数据点矩阵
mesh(yt, xt, zeros(size(xt)), 'FaceColor', ...
'None', 'LineWidth', 1, ...
'EdgeColor', 'k');%绘制三维网格图
tp=title(['T = ',num2str(t)]);%步数记录
pause(0.15);%间隔0.15秒
number=any(G)+any(B);
if number==0
break;
end
end
评论1