matlab绘制动态图
常用的包括两种方式: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绘制动态图相关推荐
- MATLAB绘制主函数动态图,matlab绘制动态图
mathematica绘制动态图,"绘图之王"争霸赛--Excel才是绘图王道,matlab绘制动态图,动态三维图绘制 matlab动态图画法_数学_自然科学_专业资料.Matla ...
- Matlab 绘制动态图
在写论文的过程中,我们经常需要用MATLAB绘制图形.论文中的图形都是图片格式,但是在展示和汇报时,如果将图形做成GIF动图,变量的变化过程就会非常直观,展示效果也会非常好.下面将本人利用MATLAB ...
- matlab绘制动态图,Matlab绘制动态图的两种方式(参考)
第一种方式 close all; clear all; clc; clf; xlabel('X轴'); ylabel('Y轴'); box on; axis([-2,2,-2,2]); axis eq ...
- nyquist图怎么画matlab,用MATLAB绘制Nyquist图
<用MATLAB绘制Nyquist图>由会员分享,可在线阅读,更多相关<用MATLAB绘制Nyquist图(9页珍藏版)>请在人人文库网上搜索. 1.用MATLAB绘制Nyqu ...
- 超详细的Python matplotlib 绘制动态图
复习回顾 在matplotlib模块中我们前面学习绘制如折线.柱状.散点.直方图等静态图形.我们都知道在matplotlib模块主要有三层脚本层为用户提供快捷的绘制图形方法,美工层接收到脚本层的命令后 ...
- python绘制动态图-Python利用Echarts绘制动态交互图:快速入门
我们都知道,Echarts是百度开源的超强大的数据可视化工具.Python中经典的matplotlib.seaborn等库相比,它最大的优点是所绘制的图形为动态图,这意味着我们可以和图形之间进行动态的 ...
- 用matlab绘制P三曲线,知道曲线方程 怎么用matlab绘制三维图 一定要给出程序 , matlab怎样画三维曲线...
导航:网站首页 > 知道曲线方程 怎么用matlab绘制三维图 一定要给出程序 , matlab怎样画三维曲线 知道曲线方程 怎么用matlab绘制三维图 一定要给出程序 , matlab怎样画 ...
- 如何使用 MATLAB 绘制小提琴图
写了个matlab绘制小提琴图的函数: 图中小提琴状区域为核密度曲线 白色方块为25%,75%分位数 中间横线为中位数 白色点为离群值点 竖着的黑线是去掉离群值点后点的上下限 1使用示例 基础使用,Y ...
- MATLAB绘制雷达图并导出矢量图到Visio编辑(论文用图)
MATLAB绘制雷达图并导出矢量图到Visio编辑(论文用图) 前言: matlab绘制雷达图 雷达图(Radar Chart)又被叫做蜘蛛网图(Spider Chart),适用于显示三个或更多的 ...
最新文章
- 找不到命令报错bash:command not found解决方案
- 《javascript设计模式》笔记之第十章 和 第十一章:门面模式和适配器模式
- 【题解】Luogu P5279 [ZJOI2019]麻将
- Oracle查询优化-07日期运算
- 帝国cms文章页调用当前文章URL如何操作?
- c语言中数组大小10000,C语言,怎么存一个很大的数,比方说10000的阶乘
- concat合并的数组会有顺序么_JS 数组操作 记录 笔记
- 移动端H5终端适配方案
- 【script】python实现多线程将doc、docx转pdf,doc转docx
- 如何在ASP.NET中生成HTML5离线Web应用
- 培养“资源意识”,有助于职场晋升
- pytorch自我错误总结
- wps表格l制作甘特图_WPS表格制作进度计划横道图教程
- ftp连接工具,8款免费又好用的ftp连接工具
- matlab 峰值提取,Matlab2019b信号峰值检测与提取
- C函数篇(recv函数)
- matlab现值与终值函数_Matlab金融工具箱中的主要功能函数
- 百度地图API去掉百度logo信息等
- 解决beyond compare秘钥被吊销的问题
- 2020牛客暑期多校训练营(第九场)——Groundhog and 2-Power Representation
热门文章
- Pixel 2 XL手机 破BootLoader、刷机流程
- 你以为的5G仅仅是运行在5G的频段嘛?一文带你了解国内运营商的5G/4G/3G/2G频谱划分
- djangorestframworkpython之间的版本关系
- HTML作业制作服装推广软文,服装推广软文怎么写?有什么技巧?
- lumia 525 android 7.1,惊呆!WP老爷机Lumia 520可流畅运行安卓7.1
- 数字化新星何为低代码?何为无代码
- linux会自动平板电脑,GitHub - Dysonnnn/linux-chuwi_Vi10: 驰为Vi10 平板电脑装linux系统
- gif动画怎么制作,如何用电脑制作gif动态图片
- C#语言实例源码系列-实现树形图列表
- C语言(递归)使用递归方法,求解X^n