MATLAB实现小球随机游走动画

模型讲解

在这里插入图片描述

初始位置2||3||4
1/3概率前进、后退、不动(一次一步)
位置1只能前进至2
位置5只能后退至4
详细见代码

低阶代码

function ballmove
clear
clc
close all
%%
% 静态图形预设
figure ('Color',[1 1 1])%白色背景
hold on
axis off%关闭坐标轴
axis equal%控制线段输出尺寸
plot([1,5],[0,0])
for i=1:5
    plot ([i i],[0,0.1]);%'Color','b'固定颜色
    text(i-0.03,-0.1,num2str(i))
end
x0=randi([2,4]);
h=plot(x0,0,'c.','MarkerSize',40);
dx=0.008;
%循环100次
for i=1:100
    if x0==1
        x1=2;
    elseif x0==5
        x1=4;
    else
    p=randi([1,3]);
    if p==1
        x1=x0+1;
    elseif p==2
        x1=x0;
    elseif p==3
        x1=x0-1;
    end
    end
   if x1<x0
       while x1<x0
           x0=x0-dx;
          set(h,'XData',x0);
          drawnow
       end
       x0=x1;
       set(h,'XData',x0);
       drawnow
   elseif x1==x0
       pause(0.5)
   elseif x1>x0
       while x1>x0
           x0=x0+dx;
          set(h,'XData',x0);
          drawnow
       end
       x0=x1;
       set(h,'XData',x0);
       drawnow
   end
end

效果图:
在这里插入图片描述

高阶代码(+计数功能)

声明:
在低阶基础上加上小球到达位置1或位置5的次数统计

function draw_ballmove
clear
clc
close all
%%
% 静态图形预设
figure ('Color',[1 1 1])%白色背景
hold on
axis off%关闭坐标轴
axis equal%控制线段输出尺寸
plot([1,5],[0,0])
for i=1:5
    plot ([i i],[0,0.1]);%'Color','b'可以固定颜色
    text(i-0.03,-0.1,num2str(i))
end
x0=randi([2,4]);
h=plot(x0,0,'c.','MarkerSize',40);
dx=0.005;
count1=0;
count5=0;
t1=text(1-0.03,0.2,num2str(count1));
t5=text(5-0.03,0.2,num2str(count5));
%%
%循环30次
for k=1:30
    if x0==1
        count1=count1+1;
        plot(1,0,'.','MarkerSize',40);
   %两种方法动态显示count1变化
   %————1
   %  set(t1,'Visible','off');
   %  t1=text(1-0.03,0.2,num2str(count1));
   %————2
        set(t1,'String',num2str(count1));
        x0=randi([2,4]);
    elseif x0==5
        count5=count5+1;
        plot(5,0,'.','MarkerSize',40);
        set(t5,'String',num2str(count5));
        x0=randi([2,4]);
    end
    %%
    p=randi([1,3]);
    if p==1
        x1=x0+1;
    elseif p==2
        x1=x0;
    elseif p==3
        x1=x0-1;
    end
    %%
   if x1<x0
        for j=x0:-dx:x1
        set(h,'XData',j)
        drawnow
        end
   elseif x1==x0
       pause(0.5)
   elseif x1>x0
        for i=x0:dx:x1
        set(h,'XData',i)
        drawnow
        end
   end
   x0=x1;
end

效果图:
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值