2020iypt摩擦振子(三)仿真動畫代碼
代碼允許轉(zhuǎn)載,但是放在附錄時一定要記得把出處和制作人標(biāo)清楚!?。。。。。。。。。。。。。。。。。。。。。。。。?!
思路講解:
我們知道動畫是由一張一張的圖片構(gòu)成的,那么根據(jù)這個,我們只需將各個時刻的位置參數(shù)求解出來,然后合成再一起,就是視頻了
使用軟件:Matlab2019
%%摩擦振子仿真動畫
%%初步的動力學(xué)基礎(chǔ)以及初步求解
%%制作者b戰(zhàn)茤一分問候,時間2020/1/22
%%使用代碼或引用代碼請務(wù)必保留開始部分的注釋
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;%重物的質(zhì)量
u=0.44;%動摩擦因數(shù)
%——————————————————————————
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('摩擦振子_摩擦系數(shù)0.44_兩軸間距0.20.avi');%創(chuàng)建動畫
v.FrameRate=60;
open(v);
for j=1:16:loops
? x2z{j}=num2str(x2(j));%數(shù)字文字化
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)%重物圓環(huán)左
plot(-x,-(h+r/2),'.','Color','k');%繪制圓心左
rectangle('Position',[x-r/2 -(r+h) r r],'Curvature',[1 1],'EdgeColor','b','LineWidth',1.5)%重物圓環(huán)右
plot(x,-(h+r/2),'.','Color','k');%繪制圓心右
text(x2(i,1),0.02,'圓心坐標(biāo):');%指示線數(shù)字
text(x2(i,1)+0.15,0.02,x2z{1,i});%指示線數(shù)字
axis equal? %設(shè)置坐標(biāo)間隔
F(i) = getframe(gcf);%保存幀
writeVideo(v,F(i));%寫入動畫
close
end
close(v);