📄 模拟一个小球的下落过程.txt
字号:
摘要: 地面有山峰,有山谷.考虑一下小球自由下落,其中
不计空寂阻力.
程序:
close all;clc;clear;
figure;
x=linspace(-3.7,3.7,400);
y=cos(pi*x)/2+exp(x.^2/8);
Fun=inline('cos(pi*x)/2+exp(x.^2/8)-y','x','y');
Df=inline('-sin(pi*x)*pi/2+x*exp(x^2/8)/4','x');
% \copyright: zjliu
% Author's email: zjliu2001@163.com
plot(x,y);hold on;
plot(xlim,[5.3,5.3],'r');
set(gcf,'DoubleBuffer','on');
title('\itfalling ball','fontsize',16,...
'fontname','times new roman');
Td=text(-4.2,1.8,'t=0 s','fontsize',14,'color',[0.4,0.3,0.9]);
Te=text(-4.2,1.2,'h=5.3 m','fontsize',14,'color',[0.4,0.3,0.8]);
Tf=text(-4.2,0.6,'v=0 m/s','fontsize',14,'color',[0.4,0.3,0.8]);
dz=x+i*y;
qz=0.5+5.3*i;
tp=linspace(0,pi*2,100);
qa=qz+0.08*exp(i*tp);
hF=fill(real(qa),imag(qa),'k');
axis([-4,4,0,7]);
axis equal;
g=9.8;% 重力加速度
v=0;
t=0;dt=0.014;
while t<20;
qz=qz+v*dt-0.5*g*dt^2*i;
v=v-g*dt*i;
qa=qz+0.08*exp(i*tp);
set(hF,'XData',real(qa),'YData',imag(qa));
Dd=abs(qz-dz);
if min(Dd)<0.18;
zy=linspace(-0.09,0.09,200)*exp(i*angle(v))+qz;
Fxy=Fun(real(zy),imag(zy));
[qq,Ka]=min(abs(Fxy));
zp=zy(Ka);
An=atan(Df(real(zp)))-pi/2;
An=An+pi*(An<0);
Am=angle(v);
Am=Am+pi*(Am<0);
Ak=2*An-Am;
v=abs(v)*exp(i*Ak);
end
t=t+dt;
set(Td,'String',['t=',num2str(t),' s']);
set(Te,'String',['h=',num2str(imag(qz)),' m']);
set(Tf,'String',['v=',num2str(abs(v)),' m/s']);
pause(0.1);
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -