2020iypt摩擦振子(三)仿真动画代码
代码允许转载,但是放在附录时一定要记得把出处和制作人标清楚!!!!!!!!!!!!!!!!!!!!!!!!!!!
思路讲解:
我们知道动画是由一张一张的图片构成的,那么根据这个,我们只需将各个时刻的位置参数求解出来,然后合成再一起,就是视频了
使用软件:Matlab2019
%%摩擦振子仿真动画
%%初步的动力学基础以及初步求解
%%制作者b战茤一分问候,时间2020/1/22
%%使用代码或引用代码请务必保留开始部分的注释
clear all
global x l p d h g
x=0.20;%两轴的一半间距
l=0.8;%重物的长度
p=1.5*10^3;%重物的密度
d=0.05;%重物的宽度
h=0.01;%重物的高度
g=9.8;%重力加速度
m=p*h*l*d;%重物的质量
u=0.44;%动摩擦因数
%——————————————————————————
a2=zeros(10000,1);
v2=zeros(10000,1);
x2=zeros(10000,1);
x2(1,1)=0.1;%重心偏移原点的位置
t=0.001;%时间步长
G=m*g;%重力
for i=2:10000
G=m*g;%重力
N1=((x*G-G*x2(i-1,1))/2+x2(i-1,1)*G)/x;%受力分析的方程
N2=(x*G-G*x2(i-1,1))/(2*x); %受力分析的方程
a2(i,1)=(N2*u-N1*u)/m; %受力分析的方程
v2(i,1)=v2(i-1,1)+a2(i,1)*t; %速度
x2(i,1)=x2(i-1,1)+v2(i,1)*t; %位移
end
%hold on
%plot(x2,'Color','b')
%plot(v2,'Color','r')
%plot(a2,'Color','c')
%-----------------------------------------
%演示动画部分
A=size(x2);
loops = A(1,1);
F(loops) = struct('cdata',[],'colormap',[]);
v = VideoWriter('摩擦振子_摩擦系数0.44_两轴间距0.20.avi');%创建动画
v.FrameRate=60;
open(v);
for j=1:16:loops
x2z{j}=num2str(x2(j));%数字文字化
end
for i=1:16:A(1,1)
figure(i)
r=0.1;%底部圆的直径
hold on
axis([-0.5 0.5 -0.3 0.3])
rectangle('Position',[-l/2+x2(i,1) -h l h],'EdgeColor','r','LineWidth',1.5)%重物平板的部分
rectangle('Position',[-(x+r/2) -(r+h) r r],'Curvature',[1 1],'EdgeColor','b','LineWidth',1.5)%重物圆环左
plot(-x,-(h+r/2),'.','Color','k');%绘制圆心左
rectangle('Position',[x-r/2 -(r+h) r r],'Curvature',[1 1],'EdgeColor','b','LineWidth',1.5)%重物圆环右
plot(x,-(h+r/2),'.','Color','k');%绘制圆心右
text(x2(i,1),0.02,'圆心坐标:');%指示线数字
text(x2(i,1)+0.15,0.02,x2z{1,i});%指示线数字
axis equal %设置坐标间隔
F(i) = getframe(gcf);%保存帧
writeVideo(v,F(i));%写入动画
close
end
close(v);

