matlab动画绘制 (drawnow gif动态图 动态字符串说明 以无人机协同作战为例)

一、快速入门
对关键地几个步骤进行说明,后面将举例具体说明。
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

你可能感兴趣的:(matlab动画绘制 (drawnow gif动态图 动态字符串说明 以无人机协同作战为例))