常用的包括两种方式:plot方式及drawnow方式
以导弹跟踪问题为例子。
位于坐标原点的A船向位于其正东⽅20个单位的B 船发射导弹,导弹始终对准B船, B船以时速V单位(常数)沿东北⽅向逃逸。若导弹的速度为3V,导弹的射程是50个单位,画出导弹运⾏的曲线,导弹是否能在射程内击中B船?

plot方式

原理

一定循环次数后画一下移动后的点(若想看动态效果一定要pause一小段时间)

代码

clc;clear
DeltaT = 0.0000001;
n = 1000000000; % 导弹最长运行时间100s
PositionA = [0,0];  % A的坐标
PositionB = [20,0]; % B的坐标
% V = randi(100); %速度为1~100个单位内的随机数
V = 200;    % V若是0-100,曲线画的太慢
a = atan(V*DeltaT/sqrt(2)/(V*DeltaT/sqrt(2)+20)); % 角度a1
disp('正在模拟测试中');
k = 0; % 用于画图,当循环次数达到500时画一个点plot(PositionA(1),PositionA(2),'.k','MarkerSize',1);  % 画出导弹和B船所在的坐标,点的大小为1,颜色为黑色(k),用小点表示
grid on;  % 打开网格线
hold on;  % 不关闭图形,继续画图
plot(PositionB(1),PositionB(2),'.k','MarkerSize',1);  % 画出导弹和B船所在的坐标,点的大小为1,颜色为黑色(k),用小点表示
hold on;  % 不关闭图形,继续画图axis([0 30 0 10])  % 固定x轴的范围为0-30  固定y轴的范围为0-10
for i=1:nPositionB = PositionB + [V*DeltaT/sqrt(2),V*DeltaT/sqrt(2)];a = atan(PositionB(2)-PositionA(2)) / (PositionB(1)-PositionA(1));PositionA = PositionA + [3*V*DeltaT*cos(a),3*V*DeltaT*sin(a)];k = k+1;if mod(k,500) == 0   % 每刷新500次时间就画出下一个导弹和B船所在的坐标  mod(m,n)表示求m/n的余数plot(PositionA(1),PositionA(2),'.k','MarkerSize',1);  % 画出导弹和B船所在的坐标,点的大小为1,颜色为黑色(k),用小点表示hold on;  % 不关闭图形,继续画图plot(PositionB(1),PositionB(2),'.k','MarkerSize',1);  % 画出导弹和B船所在的坐标,点的大小为1,颜色为黑色(k),用小点表示hold on;  % 不关闭图形,继续画图pause(0.001);  % 暂停0.001s后再继续下面的操作end    if (abs(sum(PositionA-PositionB))<0.01) & (sqrt(sum(PositionA.*PositionA))<=50) %当导弹和B船足够近且在导弹射程之内disp('导弹能击中');break;end
end
disp('模拟测试完毕');

drawnow方式

在使用此方式顺便加入了如何将动态图保存为gif文件

原理

① 首先利用animatedline创造动画线条,可以自定义线条的颜色大小样式等
② 在循环内利用addpoints函数并drawnow
若要在同一个图内画多个动态线,则要创造多个动画线条

clc;clear
DeltaT = 0.00001;
n = 1000000000;
PositionA = [0,0];  % A的坐标
PositionB = [20,0]; % B的坐标
% V = randi(100); %速度为1~100个单位内的随机数
V = 2000;    % V若是0-100,曲线画的太慢
a = atan(V*DeltaT/sqrt(2)/(V*DeltaT/sqrt(2)+20)); % 角度a1filename = 'test.gif';
Fig = figure;disp('正在模拟测试中');an1 = animatedline; % 创造动画线条
an1.LineWidth = 1.0;
an1.Color = 'b';
an2 = animatedline;
an2.Color = 'r';
an2.LineWidth = 1.0;axis([0 30 0 10])  % 固定x轴的范围为0-30  固定y轴的范围为0-10
for i=1:nPositionB = PositionB + [V*DeltaT/sqrt(2),V*DeltaT/sqrt(2)];a = atan(PositionB(2)-PositionA(2)) / (PositionB(1)-PositionA(1));PositionA = PositionA + [3*V*DeltaT*cos(a),3*V*DeltaT*sin(a)];addpoints(an1,PositionA(1),PositionA(2));   %画点addpoints(an2,PositionB(1),PositionB(2));drawnow limitrate;  % 加快处理frame = getframe(Fig);  % 获得帧数据im = frame2im(frame);   % 返回帧数据的相关图像数据[imind,cm]=rgb2ind(im,256); % matlab的gif不支持rgb并转换分别存储,256:rgb的颜色种类;索引图像 imind,关联颜色图为 cmif i==1 % 第一帧的时候overwrite覆盖式存储,并设置GIf的重复次数为无线,即放完后自动再放imwrite(imind,cm,filename,'gif','WriteMode','overwrite','Loopcount',inf);   else % 从第二帧开始,让后来的图像叠加到已创的gif文件中且 延时为0 即最快处理imwrite(imind,cm,filename,'gif','WriteMode','append','DelayTime',0);endif (abs(sum(PositionA-PositionB))<0.01) & (sqrt(sum(PositionA.*PositionA))<=50) %当导弹和B船足够近且在导弹射程之内disp('导弹能击中');break;end
end
drawnow; % 使用drawnow limitrate的时候 帮助手册上说明需最后加一句drawnow
disp('模拟测试完毕');

matlab绘制动态图相关推荐

  1. MATLAB绘制主函数动态图,matlab绘制动态图

    mathematica绘制动态图,"绘图之王"争霸赛--Excel才是绘图王道,matlab绘制动态图,动态三维图绘制 matlab动态图画法_数学_自然科学_专业资料.Matla ...

  2. Matlab 绘制动态图

    在写论文的过程中,我们经常需要用MATLAB绘制图形.论文中的图形都是图片格式,但是在展示和汇报时,如果将图形做成GIF动图,变量的变化过程就会非常直观,展示效果也会非常好.下面将本人利用MATLAB ...

  3. matlab绘制动态图,Matlab绘制动态图的两种方式(参考)

    第一种方式 close all; clear all; clc; clf; xlabel('X轴'); ylabel('Y轴'); box on; axis([-2,2,-2,2]); axis eq ...

  4. nyquist图怎么画matlab,用MATLAB绘制Nyquist图

    <用MATLAB绘制Nyquist图>由会员分享,可在线阅读,更多相关<用MATLAB绘制Nyquist图(9页珍藏版)>请在人人文库网上搜索. 1.用MATLAB绘制Nyqu ...

  5. 超详细的Python matplotlib 绘制动态图

    复习回顾 在matplotlib模块中我们前面学习绘制如折线.柱状.散点.直方图等静态图形.我们都知道在matplotlib模块主要有三层脚本层为用户提供快捷的绘制图形方法,美工层接收到脚本层的命令后 ...

  6. python绘制动态图-Python利用Echarts绘制动态交互图:快速入门

    我们都知道,Echarts是百度开源的超强大的数据可视化工具.Python中经典的matplotlib.seaborn等库相比,它最大的优点是所绘制的图形为动态图,这意味着我们可以和图形之间进行动态的 ...

  7. 用matlab绘制P三曲线,知道曲线方程 怎么用matlab绘制三维图 一定要给出程序 , matlab怎样画三维曲线...

    导航:网站首页 > 知道曲线方程 怎么用matlab绘制三维图 一定要给出程序 , matlab怎样画三维曲线 知道曲线方程 怎么用matlab绘制三维图 一定要给出程序 , matlab怎样画 ...

  8. 如何使用 MATLAB 绘制小提琴图

    写了个matlab绘制小提琴图的函数: 图中小提琴状区域为核密度曲线 白色方块为25%,75%分位数 中间横线为中位数 白色点为离群值点 竖着的黑线是去掉离群值点后点的上下限 1使用示例 基础使用,Y ...

  9. MATLAB绘制雷达图并导出矢量图到Visio编辑(论文用图)

    MATLAB绘制雷达图并导出矢量图到Visio编辑(论文用图) 前言: matlab绘制雷达图   雷达图(Radar Chart)又被叫做蜘蛛网图(Spider Chart),适用于显示三个或更多的 ...

最新文章

  1. 找不到命令报错bash:command not found解决方案
  2. 《javascript设计模式》笔记之第十章 和 第十一章:门面模式和适配器模式
  3. 【题解】Luogu P5279 [ZJOI2019]麻将
  4. Oracle查询优化-07日期运算
  5. 帝国cms文章页调用当前文章URL如何操作?
  6. c语言中数组大小10000,C语言,怎么存一个很大的数,比方说10000的阶乘
  7. concat合并的数组会有顺序么_JS 数组操作 记录 笔记
  8. 移动端H5终端适配方案
  9. 【script】python实现多线程将doc、docx转pdf,doc转docx
  10. 如何在ASP.NET中生成HTML5离线Web应用
  11. 培养“资源意识”,有助于职场晋升
  12. pytorch自我错误总结
  13. wps表格l制作甘特图_WPS表格制作进度计划横道图教程
  14. ftp连接工具,8款免费又好用的ftp连接工具
  15. matlab 峰值提取,Matlab2019b信号峰值检测与提取
  16. C函数篇(recv函数)
  17. matlab现值与终值函数_Matlab金融工具箱中的主要功能函数
  18. 百度地图API去掉百度logo信息等
  19. 解决beyond compare秘钥被吊销的问题
  20. 2020牛客暑期多校训练营(第九场)——Groundhog and 2-Power Representation

热门文章

  1. Pixel 2 XL手机 破BootLoader、刷机流程
  2. 你以为的5G仅仅是运行在5G的频段嘛?一文带你了解国内运营商的5G/4G/3G/2G频谱划分
  3. djangorestframworkpython之间的版本关系
  4. HTML作业制作服装推广软文,服装推广软文怎么写?有什么技巧?
  5. lumia 525 android 7.1,惊呆!WP老爷机Lumia 520可流畅运行安卓7.1
  6. 数字化新星何为低代码?何为无代码
  7. linux会自动平板电脑,GitHub - Dysonnnn/linux-chuwi_Vi10: 驰为Vi10 平板电脑装linux系统
  8. gif动画怎么制作,如何用电脑制作gif动态图片
  9. C#语言实例源码系列-实现树形图列表
  10. C语言(递归)使用递归方法,求解X^n