FEM-Course-Matlab/12+13框架结构动力分析(模态分析+时程分析)/RenderFrameMotion.m

80 lines
2.2 KiB
Mathematica
Raw Normal View History

2024-01-28 16:46:36 +00:00
%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ScaleΪ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD>(<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD>񲿷֣<EFBFBD>
function RenderFrameMotion(ele,Load,Constr,xx,yy,UU,LineWidth,LineStyle,delaytime,speed)
CoordScale=[max(xx)-min(xx),max(yy)-min(yy)];
Umax=max(max((UU)));
CoordScale2=CoordScale(1)/Umax/5
k=1;
num=1;
hf=figure;
delaytime=0;
ifr=0;
for nnn=1:speed:length(UU(1,:))
nnn;
U=UU(:,nnn);
%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for i=1:length(xx)
if Constr(k,1)==i & k<length(Constr(:,1))%--Լ<EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
k=k+1;
else%--<EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
x(i)=xx(i)+CoordScale2(1)*U(3*i-2,1);y(i)=yy(i)+CoordScale2(1)*U(3*i-1,1);
end
end
%<EFBFBD><EFBFBD><EFBFBD>Ƹ˼<EFBFBD>
for i=1:length(ele(:,1))
plot([x(ele(i,2)),x(ele(i,3))],[y(ele(i,2)),y(ele(i,3))],...
LineStyle,'LineWidth',LineWidth*ele(i,4)/max(ele(:,4)));
hold on
end
%<EFBFBD><EFBFBD><EFBFBD>ƽڵ<EFBFBD>
for i=1:length(xx)
x1=x(i);y1=y(i);
scatter(x1,y1,15,'k','filled')
end
%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD>
maxLoad=abs(Load(1,2));%Ѱ<EFBFBD>Ҿ<EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD>
for i=1:length(Load(:,1))
if(maxLoad<abs(Load(i,3)))
maxLoad=abs(Load(i,3))
end
end
for i=1:length(Load(:,1))%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>غɼ<EFBFBD>ͷ
quiver(x(Load(i,1)),y(Load(i,1)),Load(i,2)/max(maxLoad),...
Load(i,3)/max(maxLoad),...
'LineWidth',1,'color','r','AutoScaleFactor',0.15*(CoordScale(1)+CoordScale(2)),...
'MaxHeadSize',0.01*(CoordScale(1)+CoordScale(2)));
end
%<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD>--ѡ<EFBFBD>ý<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>׼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD>
for i=1:length(Constr(:,1))
plot([x(Constr(i,1)) x(Constr(i,1))-0.02*max(CoordScale) x(Constr(i,1))+...
0.02*max(CoordScale) x(Constr(i,1))],[y(Constr(i,1)) y(Constr(i,1))-...
0.02*max(CoordScale) y(Constr(i,1))-0.02*max(CoordScale) y(Constr(i,1))],...
'LineWidth',0.8,'color','r');
end
%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
axis equal
% axis([min(x)-0.1*CoordScale(1),max(x)+0.1*CoordScale(1),min(y)-...
% 0.1*CoordScale(2),max(y)+0.1*CoordScale(2)]...
% ) %<EFBFBD>޶<EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>Χ
hold off
drawnow
ifr=ifr+1;
gifFilename='time-history.gif';
hfr=getframe(hf);
im=frame2im(hfr);
[I,map]=rgb2ind(im,256);
if ifr==1
imwrite(I,map,gifFilename,'gif', 'DelayTime',delaytime);
else
imwrite(I,map,gifFilename,'gif','WriteMode','append','DelayTime',delaytime);
end
% delete(h(time_num,:))
end
% movie(m);
% v = VideoWriter('time-history.avi');
% open(v);
% writeVideo(v,m);
% close(v);
end