80 lines
2.2 KiB
Matlab
80 lines
2.2 KiB
Matlab
%绘制桁架函数,Scale为变形缩放系数(以下为绘制图像部分)
|
||
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);
|
||
%计算变形后坐标
|
||
for i=1:length(xx)
|
||
if Constr(k,1)==i & k<length(Constr(:,1))%--约束节点坐标不变
|
||
k=k+1;
|
||
else%--非约束节点坐标加上缩放后的位移
|
||
x(i)=xx(i)+CoordScale2(1)*U(3*i-2,1);y(i)=yy(i)+CoordScale2(1)*U(3*i-1,1);
|
||
end
|
||
end
|
||
%绘制杆件
|
||
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
|
||
%绘制节点
|
||
for i=1:length(xx)
|
||
x1=x(i);y1=y(i);
|
||
scatter(x1,y1,15,'k','filled')
|
||
end
|
||
|
||
%绘制载荷
|
||
maxLoad=abs(Load(1,2));%寻找绝对值最大的载荷
|
||
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))%绘制载荷箭头
|
||
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
|
||
%绘制约束--选用结构最大的坐标尺寸作为基准来绘制约束
|
||
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
|
||
%绘制坐标轴
|
||
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)]...
|
||
% ) %限定图像的显示范围
|
||
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 |