一、快速入门
对关键地几个步骤进行说明,后面将举例具体说明。
1.drawnow
刷新帧数函数,是matlab中较为简单的动画绘制命令。
此步完成一个matlab环境下的动画生成.m文件。
2.gif动态图
进阶
基础
在第一步.m文件的基础上,增添生成.gif动画的代码,实现同步在matlab平台展示,并写入.gif文件的功能。
3.动态字符串
若想在动画中加入当前帧数显示,不妨利用title函数
一个简单的例子如下(在标题中包含变量的值)
figure
plot((1:10).^2)
f = 70;
c = (f-32)/1.8;
title(['Temperature is ',num2str(c),' C'])
巧用title的功能,可以实现多种自己想要的动态输出。
二、模板
clc
clear
pic_num = 1;
for i***************************
circle(PosX(1,i),PosY(1,i),USR,1);
title(['Time is ',num2str(i),' sec'])
drawnow;
pause(0.2);
F=getframe(gcf);
I=frame2im(F);
[I,map]=rgb2ind(I,256);
if pic_num == 1
imwrite(I,map,'test.gif','gif','Loopcount',inf,'DelayTime',0.2);
else
imwrite(I,map,'test.gif','gif','WriteMode','append','DelayTime',0.2);
end
pic_num = pic_num + 1;
end
三、举例:多无人机自组织作战的作战仿真展示
%战场比例尺 1=100m , 10=1km
%设置战场环境
SPR=800; % Space Position Range
MET=3000; % Max Engagement Time
SN=100; % solution number
N=10;
T=3;
SP=77.16/100; % speed
USR=50; % U sensor range
TSR=300; % T sensor range
UER=30; % UAV Engagement Range
TER=[4 8 12 16 20]; % Target Engagement Range
pic_num = 1;
T=3;
for i=[1:6:1470 1401:1500 1501:6:2690 2691:2800 2800:6:MET]
plot(PosT(:,1),PosT(:,2),'ko',PosX(1,i),PosY(1,i),'r*',PosX(2,i),PosY(2,i),'r*',PosX(3,i),PosY(3,i),'r*',PosX(4,i),PosY(4,i),'r*',PosX(5,i),PosY(5,i),'r*',PosX(6,i),PosY(6,i),'r*',PosX(7,i),PosY(7,i),'r*',PosX(8,i),PosY(8,i),'r*',PosX(9,i),PosY(9,i),'r*',PosX(10,i),PosY(10,i),'r*');
for Tnum=1:T
if LTP(Tnum,i)>0 && LTP(Tnum,i)<10
circleT_attacking(PosT(Tnum,1),PosT(Tnum,2),TSR);
circleT_attacking(PosT(Tnum,1),PosT(Tnum,2),ter);
elseif LTP(Tnum,i)==10
circleT(PosT(Tnum,1),PosT(Tnum,2),TSR);
circleT(PosT(Tnum,1),PosT(Tnum,2),ter);
end
end
circle(PosX(1,i),PosY(1,i),USR,1); circle(PosX(2,i),PosY(2,i),USR,2);circle(PosX(3,i),PosY(3,i),USR,3);circle(PosX(4,i),PosY(4,i),USR,4);circle(PosX(5,i),PosY(5,i),USR,5);
circle(PosX(6,i),PosY(6,i),USR,6);circle(PosX(7,i),PosY(7,i),USR,7);circle(PosX(8,i),PosY(8,i),USR,8);circle(PosX(9,i),PosY(9,i),USR,9);circle(PosX(10,i),PosY(10,i),USR,10);
axis([0 SPR 0 SPR]);
title(['Time is ',num2str(i),' sec'])
drawnow;
%pause(0.01);
F=getframe(gcf);
I=frame2im(F);
[I,map]=rgb2ind(I,256);
if pic_num == 1
imwrite(I,map,'engagement_g1.gif','gif', 'Loopcount',inf,'DelayTime',0);
else
imwrite(I,map,'engagement_g1.gif','gif','WriteMode','append','DelayTime',0);
end
pic_num = pic_num + 1;
end