Matlab实现小球在数轴上滚动

情景描述:

   一个小球随机出现在1-5的数轴上的任意位置,随机地向右或向左滚动一个单位,直到小球到达数轴顶端停止滚动被吞噬,数轴两端的颜色也会因为吞噬而变深,之后将再重新在数轴上任意位置随机生成一个小球,继续随机地向右或向左滚动一个单位直到被吞噬。上述动作重复100次,分别计数小球到达数轴左右两端的个数。

情景展示:

情景实现:

matlab代码

clc;
clear;
close all;
figure('color',[1 1 1]);
hold on;
axis off;
axis equal;
left=0;
right=0;
plot([1,5],[0,0]);%画出一条横线
for i = 1:5
    plot([i,i],[0,0.1]);%在横线上的标点
    text(i-0.03,-0.1,num2str(i));%横线下的数字
end
t1=text(0.97,0.4,num2str(left));
t2=text(4.97,0.4,num2str(right));
t3=text(4.6,-0.3,"Admine:start");
dx=0.05;%速度
%圆和它的随机初始位置
x=randi([2,4]);
y=0.08;
h=plot(x,y,'r.','MarkerSize',38);
hl= plot(0.99,0.2,'black.','MarkerSize',38);
hr= plot(4.99,0.2,'black.','MarkerSize',38);

while true
   if x==1
       x=randi([2,4]);
       set(h,'xdata',x);
       drawnow;
       left=left+1;
       i=mod(left,15);
        if  i <=5  %颜色会越来越深
          newColor=[1-0.2*i,1,1];
       elseif i <=10
          newColor=[1,1-0.2*(i-5),1];
        else  
          newColor=[1,1,1-0.2*(i-10)];
        end
        set(t1,'string',num2str(left));
       set(hl, 'Color', newColor);
       set(t3,'String',"Admine:new");
      
   elseif x==5
        x=randi([2,4]);
       set(h,'xdata',x);
       drawnow;
        right=right+1;
        j =mod(right,15);
        if  j <=5  %颜色会越来越深
          newColor=[1-0.2*j,1,1];
       elseif j <=10
          newColor=[1,1-0.2*(j-5),1];
        else  
          newColor=[1,1,1-0.2*(j-10)];
        end
      set(t2,'string',num2str(right));
      set(hr, 'Color', newColor);
      set(t3,'String',"Admine:new");
   else 
       p=randi([1,3]);%1表示左移,2表示停止,3表示右移
      if p==1
         x_next=x-1;
         set(t3,'String',"Admine:left");
       elseif p==2 
         x_next=x;

         set(t3,'String',"Admine:pause");
       else
         x_next = x+1;  
         set(t3,'String',"Admine:right");
      end
   if  x > x_next
      while x >= x_next
          pause(0.025);
          set(h,'xdata',x);
          drawnow;
          x=x-dx;
      end
      x=x_next;
    
   elseif x < x_next
       while x <=x_next
           pause(0.025);
           set(h,'xdata',x);
           drawnow;
           x=x+dx;
       end
       x=x_next;
   else 
       pause(0.5);
   end
   end
end








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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值