在某些场合下,我们可能需要展示动态图,特别是在科技论文的附录材料中比较常见。
比如对于,我们想展示不同的相位角对函数波形有何影响,那么利用动态图会看得更直观👇
下面向读者介绍如何利用matlab得到上述动态图(视频)。核心代码仅需5行!!!
(更多有趣动图可以点击往期推文:
Matlab中创建动态视频,基本思想就是要把你的图窗中的每一幅静态图都“截取”在一个视频文件里面。
首先使用指令
myVideo=VideoWriter(filename)
创建新的视频文件myVideo
.
其中,filename
是自己定义的视频文件名(最后你得到的视频文件即为:filename.avi的格式)
紧接着按照:'打开文件👉写入视频的每一帧👉关闭文件'的顺序完成动态视频的创建.
用到指令:
open(myVideo)
% 先要把文件open
Fr=getframe(gcf);
% 获取当前图窗的“截图”
writeVideo(myVideo,Fr);
%将获取的图窗截图write到你创建的视频文件中
close(myVideo)
% 最后把文件close.
OK!基本过程就这样。下面我们看下如何在每一次循环中抓取图窗,完成动态视频创建。
,我们想看下相位角范围内波形的变化情况。
首先我们需要将内的相角均匀分点(这里取100个)。然后对这每一个,我们在图窗中绘制的函数曲线。接着利用getframe(gcf)
函数获取当前图像的“截图”,再将截图写入创建的视频文件即可。
利用一次for循环,详见代码:
figure % 创建图窗
myVideo=VideoWriter('VideoFile_test'); % 指定视频文件名
open(myVideo) % open开始写入
x=0:0.01:2*pi; $ 函数曲线绘图范围
for i=1:100
plot(x,sin(x+i/100*2*pi),'LineWidth',2);
pbaspect([1 1 1]) % 设置正方形图窗
xlabel('x')
ylabel('y')
title(['\phi=',num2str(i/100),'*2\pi'])
drawnow % 即时显示当前图窗
Fr=getframe(gcf); % 抓取图窗
writeVideo(myVideo,Fr); % 写入文件
end
close(myVideo) % close文件,结束
运行后可以看见matlab窗口左边“当前文件夹”下面出现刚刚得到的视频文件:
控制视频的长短可以通过调节“帧数”来实现,你一定知道,视频是由一帧一帧的静态图拼接而成,视频的”帧数“其实就是每秒钟显示多少张图。显然:
每秒显示一张图,视频会很长,会失去”动态“的感觉;
每秒显示一百张图,视频会很'丝滑',但视频比较短。
添加指令:
myVideo.FrameRate=num
可以指定视频帧数为num
(默认为30)。总的循环数100,每秒显示num,那么显然视频长度即为 100/num 秒。
例如,我们减少帧数,设置myVideo.FrameRate=10
,运行得到:
增加帧数,设置myVideo.FrameRate=50
,运行得到:
总之,我们可以通过改变帧数,来使得动图比较'迟缓'或者比较'丝滑'.
联系客服