MATLAB小球滚落斜面程序

一、运行结果 :

目录

一、运行结果 :

二、下面是MATLAB代码部分



二、MATLAB代码部分

clc;close all;clear;
%本程序实现小球从斜面滚落模拟,程序主要分为五部分
%常量声明、斜面建立、判断运动情况、绘制小球、制作GIF;

g=9.8; R=2; %常量的声明
angle=atan(20/30);
a=g*sin(angle);
ax=a*cos(angle);
ay=a*sin(angle);
v0=2.6;
for t=0:0.05:5.65
    a1=[0 0 5 35 40]; %建立斜面并加阴影
    b1=[0 20 20 0 0];
    plot(a1,b1,'-c')
    fill(a1,b1,'c')
    axis([0 40 0 40]);
    hold on;
    
    if t<=2 %判断小球运动情况
        v=v0;
        x=2.6*t;
        y=22;
    else
        v=v0+a*(t-2);
        x=5.6+0.5*ax*(t-2)^2;
        y=22-0.5*ay*(t-2)^2;
    end
    
    text(20,30,{['斜坡高度:  ' num2str(20)] ['斜坡长度:  ' num2str(30)]...%添加标注
    ['小球半径:  ' num2str(2)] ['时间  t = :  ' num2str(t)]...
    ['小球实时速度:  ' num2str(v)] ['小球实时水平位置:  ' num2str(x)]...
    ['小球实时竖直位置:  ' num2str(y)] })
    title('小球滚落斜坡');
    
    p1=linspace(0,pi); %绘制半径为R的,沿斜面运动的双色小球
    p2=linspace(pi,2*pi);
    x1=x+R*sin(p1+x*pi/4);y1=y+R*cos(p1+x*pi/4);
    x2=x+R*sin(p2+x*pi/4);y2=y+R*cos(p2+x*pi/4);
    fill(x1,y1,'w',x2,y2,'k');
    axis square;
    drawnow;
    hold off;
    
    %=============制作gif模块
    i=1+20*t;
    filename = '小球滚落斜坡.gif';
    frame = getframe(gcf);
    im = frame2im(frame);
    [imind,cm] = rgb2ind(im,256);
    if i == 1
        imwrite(imind,cm,filename,'gif','WriteMode','overwrite', 'Loopcount',inf);
    else
        imwrite(imind,cm,filename,'gif','WriteMode','append','DelayTime',0);
    end
    %=============制作gif模块
end

(第一次发博客,如有什么不对的地方还请大家理解、指正)

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MATLAB中,可以通过模拟小球碰撞来研究物体之间的碰撞行为。下面是一个简单的示例代码,用于模拟两个小球的碰撞过程: ```matlab % 定义小球的初始位置、速度和半径 pos1 = [0, 0]; % 小球1的初始位置 vel1 = [1, 0]; % 小球1的初始速度 radius1 = 1; % 小球1的半径 pos2 = [5, 0]; % 小球2的初始位置 vel2 = [-1, 0]; % 小球2的初始速度 radius2 = 1; % 小球2的半径 % 模拟碰撞过程 numSteps = 100; % 模拟的步数 dt = 0.01; % 时间步长 for step = 1:numSteps % 计算小球之间的距离和相对速度 distance = norm(pos2 - pos1); relativeVel = vel2 - vel1; % 如果小球之间有碰撞发生 if distance <= radius1 + radius2 % 计算碰撞后的速度 normal = (pos2 - pos1) / distance; % 碰撞法线方向 impulse = dot(relativeVel, normal) * normal; % 碰撞冲量 vel1 = vel1 + impulse; % 更新小球1的速度 vel2 = vel2 - impulse; % 更新小球2的速度 end % 更新小球的位置 pos1 = pos1 + vel1 * dt; pos2 = pos2 + vel2 * dt; % 绘制小球的位置 plot(pos1(1), pos1(2), 'ro', 'MarkerSize', radius1*10); hold on; plot(pos2(1), pos2(2), 'bo', 'MarkerSize', radius2*10); xlim([-10, 10]); ylim([-10, 10]); axis equal; hold off; pause(0.01); end ``` 这段代码模拟了两个小球的碰撞过程。首先定义了两个小球的初始位置、速度和半径。然后通过循环模拟碰撞过程,计算小球之间的距离和相对速度,如果小球之间有碰撞发生,则根据碰撞法线方向和碰撞冲量更新小球的速度。最后更新小球的位置,并通过绘图函数将小球的位置可视化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值