MATLAB制作绘图动画/保存视频
命令有哪些:coment 二维彗星图 https://ww2.mathworks.cn/help/matlab/ref/comet.html?s_tid=srchtitle
coment3 三维彗星图 https://ww2.mathworks.cn/help/matlab/ref/comet3.html?s_tid=srchtitle
scattter 二维散点图 https://ww2.mathworks.cn/help/matlab/ref/scatter.html?s_tid=srchtitle
scattter3 三维散点图 https://ww2.mathworks.cn/help/matlab/ref/scatter3.html?s_tid=srchtitle
animatedline 创建动画线条 https://ww2.mathworks.cn/help/matlab/ref/animatedline.html
好文参考:https://blog.csdn.net/zengxiantao1994/article/details/77482852 --比较全面
getframe函数和movie函数详解:getframe函数可以捕捉动画帧,并保存到矩阵中。该函数的主要格式有:
1、f = getframe,从当前图形框中得到动画帧;
2、f = getframe(h),从图形句柄h中得到动画帧;
3、f = getframe(h,rect),从图形句柄h的指定区域rect中得到动画帧。
当创建了一系列动画帧后,可利用movie函数播放这些动画帧。该函数的主要格式有:
1、movie(M),将矩阵M中的动画帧播放一次;
2、movie(M, n),将矩阵M中的动画帧播放n次
3、movie(M, n, fps),将矩阵M中的动画帧以每秒fps帧的速度播放n次。
axis square 当前坐标系图形设置为方形,刻度范围不一定一样,但是一定是方形的。
axis equal 将横轴纵轴的定标系数设成相同值,即单位长度相同,刻度是等长的,但不一定是方形的。
axis manual:将坐标轴的范围锁定为当前范围。如果打开了hold on命令,则后续的图形都使用同样的坐标范围。该函数设置XLimMode、YLimMode和ZLimMode属性为manual值。
一.使用 animatedline
参考:https://ww2.mathworks.cn/help/matlab/ref/animatedline.html
创建一根没有任何数据的动画线条并将其添加到当前坐标区中。通过使用 an
= animatedlineaddpoints
函数循环向线条中添加点来创建动画。
an = animatedline(x,
创建一根包含由 y
)x
和 y
定义的初始数据点的动画线条。
创建一根包含由 an
= animatedline(x,y,z)x
、y
和 z
定义的初始数据点的动画线条。
使用一个或多个名称-值对组参数指定动画线条属性。例如,an
= animatedline(___,Name,value
)\'Color\',\'r\'
将线条颜色设置为红色。在前面语法中的任何输入参数组合后使用此选项。
将在由 an
= animatedline(ax,___)ax
指定的坐标区或地理坐标区中,而不是在当前坐标区 (gca
) 中创建线条。选项 ax
可以位于前面的语法中的任何输入参数组合之前。
clc;close all;clear; %% x = 0:0.05:8*pi; y = sin(x); figure(1) curve = animatedline(\'color\',\'r\',\'linestyle\',\'-.\',\'linewidth\',2,\'marker\',\'o\');%指定线条特性
set(gca,\'XLim\',[0,8*pi],\'YLim\',[-1,1]); grid on legend(\'Anmiated Sine\') for i =1:length(x) addpoints(curve,x(i),y(i))
drawnow end
加快动画绘制速度的方法:
1.使用命令:drawnow limitrate
2.每次添加点数增多
例1:
clc;close all;clear; %% x = 0:0.05:8*pi; y = sin(x); figure(1) curve = animatedline(\'color\',\'r\',\'linestyle\',\'-.\',\'linewidth\',2,\'marker\',\'o\');%指定线条特性 set(gca,\'XLim\',[0,8*pi],\'YLim\',[-1,1]); grid on legend(\'Anmiated Sine\') for i =1:length(x) addpoints(curve,x(i),y(i)) %drawnow drawnow limitrate %the command ‘limitrate\' is used to speed up the plot speed
%pause(0.001) %每执行一次命令就暂停0.001s
end
例2:
clc;close all;clear; %% x = 0:0.05:8*pi; y = sin(x); figure(1) curve = animatedline(\'color\',\'r\',\'linestyle\',\'-.\',\'linewidth\',2,\'marker\',\'o\'); set(gca,\'XLim\',[0,8*pi],\'YLim\',[-1,1]); grid on legend(\'Anmiated Sine\') for k =1:11:length(x)-10 xvec = x(k:k+10);%一次多添加几个点 yvec = y(k:k+10); addpoints(curve,xvec,yvec) drawnow end
控制动画速度
1.使用命令:pause(t)
2.在屏幕上绘制更新之前先运行动画循环的多个迭代,以此来控制动画速度。在drawnow
太慢或drawnow limitrate
太快时可以使用此技术。
例如,每 1/30 秒更新一次屏幕。使用tic
和toc
命令可跟踪屏幕更新间经过的时间。注:更小的时间间隔会使屏幕更新更频繁,从而产生更慢的动画。
例如,使用b > (1/1000)
可以减慢动画速度。
例1:
clc;close all;clear; %% x = 0:0.05:8*pi; y = sin(x); figure(1) curve = animatedline(\'color\',\'r\',\'linestyle\',\'-.\',\'linewidth\',2,\'marker\',\'o\');%指定线条特性 set(gca,\'XLim\',[0,8*pi],\'YLim\',[-1,1]); grid on legend(\'Anmiated Sine\') for i =1:length(x) addpoints(curve,x(i),y(i)) pause(0.001) %每执行一次命令就暂停0.001s end
例2:
h = animatedline; axis([0,4*pi,-1,1]) numpoints = 10000; x = linspace(0,4*pi,numpoints); y = sin(x); a = tic; % start timer for k = 1:numpoints addpoints(h,x(k),y(k)) b = toc(a); % check timer if b > (1/30) drawnow % update screen every 1/30 seconds a = tic; % reset timer after updating end end drawnow % draw final frame
动画演示标记沿着线条移动。
https://ww2.mathworks.cn/help/matlab/creating_plots/trace-marker-along-line.html
使用scatter也可以实现
%动画演示标记沿着线条移动。 figure x = linspace(0,10,1000); y = sin(x); plot(x,y) hold on p = plot(x(1),y(1),\'o\',\'MarkerFaceColor\',\'red\'); hold off axis manual for k = 2:length(x) p.XData = x(k); p.YData = y(k); drawnow end
% cherrycheung clc; close all; t = 0:0.1:6*pi; y = sin(t); y2 = cos(t); for k = 1:length(t) %% marker plots 画出当前的位置 plot(t(k),y(k),\'x\') hold on plot(t(k),y2(k),\'o\') hold on %% line plots (每次重复画并覆盖以前的线条) plot(t(1:k),y(1:k)) hold on plot(t(1:k),y2(1:k)) %% graph properties axis([0 6*pi -1 1]) grid on xlabel(\'t\') ylabel(\'y\') legend(\'sin(t) marker\', \'cos(t) marker\', \'sin(t)\', \'cos(t)\') pause(0.1) % if k ~= length(t) %作用删除每次重复画的图保留最后一张图
% clf
% end end
三维的绘图效果
z = 0:0.05:10; y = sin(2*z); x = cos(2*z); figure(2) curve = animatedline(\'linewidth\',3,\'color\',\'b\'); set(gca,\'XLim\',[-1.5,1.5],\'YLim\',[-1.5,1.5],\'ZLim\',[0 10]); grid on hold on view(43,24); % viewpiont for i =1:length(z) addpoints(curve,x(i),y(i),z(i)) head =scatter3(x(i),y(i),z(i),\'filled\',\'MarkerFaceColor\',\'g\',\'MarkerEdgeColor\',\'r\'); drawnow % pause(0.01) %reduce the plotspeed % delete(head); end
加上delete head 的效果
z = 0:0.05:10; y = sin(2*z); x = cos(2*z); figure(2) curve = animatedline(\'linewidth\',3,\'color\',\'b\'); set(gca,\'XLim\',[-1.5,1.5],\'YLim\',[-1.5,1.5],\'ZLim\',[0 10]); grid on hold on view(43,24); % viewpiont for i =1:length(z) addpoints(curve,x(i),y(i),z(i)) head =scatter3(x(i),y(i),z(i),\'filled\',\'MarkerFaceColor\',\'g\',\'MarkerEdgeColor\',\'r\'); drawnow %pause(0.01) %reduce the plotspeed delete(head); end
二 .创建视频动画
命令:VideoWriter 详细的视频属性参考:https://ww2.mathworks.cn/help/matlab/ref/videowriter.html#d122e1351518
v = VideoWriter(filename)
创建一个 VideoWriter
对象以将视频数据写入采用 Motion JPEG 压缩技术的 AVI 文件。
v = VideoWriter(filename,profile)
还应用一组适合特定文件格式(例如 \'MPEG-4\'
或 \'Uncompressed AVI\'
)的属性。
filename文件名;profile文件类型,默认为‘Motion JPEG AVI’
%% creating a video z = 0:0.05:10; y = sin(2*z); x = cos(2*z); figure(3) curve = animatedline(\'linewidth\',2,\'color\',\'b\'); set(gca,\'XLim\',[-1.5,1.5],\'YLim\',[-1.5,1.5],\'ZLim\',[0 10]); grid on hold on view(43,24); % viewpiont % title(\'Melix\'); % set(gcf,\'Units\',\'normalized\',\'OuterPosition\',[0 0 1 1]); % 使用更大的页面看图 ,set(gcf) 获的图片 for i =1:length(z) addpoints(curve,x(i),y(i),z(i)) head =scatter3(x(i),y(i),z(i),\'MarkerFaceColor\',\'b\',\'MarkerEdgeColor\',\'r\'); % head =scatter3(x(i),y(i),z(i),\'filled\',\'MarkerFaceColor\',\'b\',\'MarkerEdgeColor\',\'r\'); drawnow F(i) = getframe(gcf); % pause(0.01) %reduce the plotspeed delete(head); title([\'t = \',num2str(i)]) end video = VideoWriter(\'helix.avi\',\'Uncompressed AVI\'); % 可以选\'Uncompressed AVI\', 或者内存更小的 \'MPEG-4\'也就是MP4 video.FrameRate = 60; %视频帧数
video.Quality = 90; %视频质量,默认75,取值[0,100] open(video) writeVideo(video,F); close(video)
不随时间旋转的情况,
%% Step 1: Generate Data %Animate a point moving along a 3D parametric curve t = linspace(0,2*pi,100); x = 5*cos(t); y = 2*sin(t); z = t; %% Step 2: Draw/Render Scenario figure; for k=1:length(t) %Clear the figure to start with a blank slate clf %clean the figure marker everytime %Extract data at the current time step t_k = t(k); x_k = x(k); y_k = y(k); z_k = z(k); %Where is the current point? plot3(x_k, y_k, z_k, \'go\', \'LineWidth\', 3, \'MarkerSize\', 15) %Plot the entire curve hold on plot3(x, y, z, \'b-\', \'LineWidth\', 2); %Add plotting options grid on xlabel(\'x\') ylabel(\'y\') zlabel(\'z\') title([\'t = \',num2str(t_k)]) view([30 35])
%% Step 3: Take a Snapshot % force Matlab to Draw the image at this point % drawnow % pause(0.01) %Save the frame movieVector(k) = getframe; %% Step 4: Advance Time %Happens automatically if using a for loop end %% Step 5: Save Movie %Create a VideoWriter object and set properties myWriter = VideoWriter(\'curve\'); %create an .avi file % myWriter = VideoWriter(\'curve\',\'MPEG-4\'); %create an .mp4 file myWriter.FrameRate = 20; %Open the VideoWriter object, write the movie, and close the file open(myWriter); writeVideo(myWriter, movieVector); close(myWriter); disp(\'DONE!\')
随时间旋转
要对getframe的捕获图形区域进行限制,否则会出现随着时间发生变话,每张图获得的帧数不一致,为此加了这一行
figh = figure;
movieVector(k) = getframe(figh, [10 10 520 400]); %manually specify getframe region
%Christopher Lum %[email protected] %Illustrate animation in Matlab %This file is designed to accompany the YouTube video at https://youtu.be/3I1_5M7Okqo clear clc close all %% Step 1: Generate Data %Animate a point moving along a 3D parametric curve t = linspace(0,2*pi,100); x = 5*cos(t); y = 2*sin(t); z = t; %% Step 2: Draw/Render Scenario figh = figure; for k=1:length(t) %Clear the figure to start with a blank slate clf % clean the figure marker everytime %Extract data at the current time step t_k = t(k); x_k = x(k); y_k = y(k); z_k = z(k); %Where is the current point? plot3(x_k, y_k, z_k, \'go\', \'LineWidth\', 3, \'MarkerSize\', 15) %Plot the entire curve hold on plot3(x, y, z, \'b-\', \'LineWidth\', 2); %Add plotting options grid on xlabel(\'x\') ylabel(\'y\') zlabel(\'z\') title([\'t = \',num2str(t_k)]) % view([30 35]) view([30+20*t_k 35]) %show how viewpoint can be manipulated %% Step 3: Take a Snapshot % force Matlab to Draw the image at this point % drawnow % pause(0.01) %Save the frame % movieVector(k) = getframe; movieVector(k) = getframe(figh, [10 10 520 400]); %manually specify getframe region %% Step 4: Advance Time %Happens automatically if using a for loop end %% Step 5: Save Movie %Create a VideoWriter object and set properties myWriter = VideoWriter(\'curve\'); %create an .avi file % myWriter = VideoWriter(\'curve\',\'MPEG-4\'); %create an .mp4 file myWriter.FrameRate = 20; %Open the VideoWriter object, write the movie, and close the file open(myWriter); writeVideo(myWriter, movieVector); close(myWriter); disp(\'DONE!\')
上述方法虽然可行,但对于大规模数据绘图来说较慢,因为他是每次重新绘图的
采用下面的方式可会绘制较快。
axes --用法参考:https://ww2.mathworks.cn/help/matlab/ref/matlab.graphics.axis.axes-properties.html
https://ww2.mathworks.cn/help/matlab/ref/axes.html?s_tid=srchtitle
https://www.cnblogs.com/stxs/p/8721348.html
%% 这个方法运行更快,因为只是每次刷新数据而已,不再每次重新画图 tic %计时 t = linspace(0,6*pi,100); x = 5*cos(t); y = 2*sin(t); z = t; figh =figure ax = axes(figh,\'XGrid\',\'on\',\'YGrid\',\'on\',\'Position\',[0.1 0.1 0.8 0.8],\'Box\',\'on\') plot3(ax,x, y, z, \'b-\', \'LineWidth\', 2); %plot the curve outside the loop only once hold on Plot1 = plot3(ax, 0, 0, 0,\'go\', \'LineWidth\', 3, \'MarkerSize\', 15); %initialize empty plot; for k=1:length(t) %Extract data at the current time step t_k = t(k); x_k = x(k); y_k = y(k); z_k = z(k); Plot1.XData = x_k; % refresh just the X Y Z data inside the loop (way quicker than reinitializing a whole new plot each time) Plot1.YData = y_k; Plot1.ZData = z_k; drawnow end toc
close all;clc;clear; axis tight equal %axis equal 沿每个坐标轴使用相同的数据单位长度 %axis tight 将坐标轴范围设置为等同于数据范围,使轴框紧密围绕数据 v = VideoWriter(\'exp3dVideo.avi\'); %先创建一个空文件 open(v); [x,y] = meshgrid(-10:0.5:10, -10:0.5:10); r = sqrt(x.^2+y.^2); for k = 0:200 z = cos(r/2+k/10).*exp(-r.^2/50); surf(x,y,z); xlim([-10,10]); ylim([-10,10]); zlim([-1,1]); frame = getframe(gcf); writeVideo(v,frame); end close(v);
动态视频--但无法插入
三.创建GIF文件
命令:rgb2ind 将 RGB 图像转换为索引图像 https://ww2.mathworks.cn/help/matlab/ref/rgb2ind.html?s_tid=srchtitle
imwrite 将图像写入图形文件 https://ww2.mathworks.cn/help/matlab/ref/imwrite.html?s_tid=srchtitle#btv3cny-5
z = 0:0.05:10; y = sin(2*z); x = cos(2*z); figure(2) curve = animatedline(\'linewidth\',3,\'color\',\'b\'); set(gca,\'XLim\',[-1.5,1.5],\'YLim\',[-1.5,1.5],\'ZLim\',[0 10]); grid on hold on view(43,24); % viewpiont for i =1:length(z) addpoints(curve,x(i),y(i),z(i)) head =scatter3(x(i),y(i),z(i),\'filled\',\'MarkerFaceColor\',\'g\',\'MarkerEdgeColor\',\'r\'); drawnow % pause(0.01) %reduce the plotspeed %下面是用来画出GIF动画的 frame = getframe; fm{i} = frame2im(frame); filename = \'test8_sin(x).gif\'; %文件名称 [A,map] = rgb2ind(fm{i},256); if i == 1 imwrite(A,map,filename,\'gif\',\'LoopCount\',Inf,\'DelayTime\',1); else imwrite(A,map,filename,\'gif\',\'WriteMode\',\'append\',\'DelayTime\',1); delete(head); end end
参考这个:没有这个语句,注意两个区别,并且用的是花括号引用的
fm{i} = frame2im(frame);
clear;clc; [x,y]=meshgrid(-8:.1:8); for j=1:10 f=@(x,y)(sin(sqrt((11-j)*(x.^bai2+y.^2)))./sqrt((11-j)*(x.^2+y.^2)+eps)); z=f(x,y); surf(x,y,z);shading interp;
M(j) = getframe; if j==1 [I,map]=rgb2ind(M(j).cdata,256); imwrite(I,map,\'out.gif\',\'DelayTime\',.1) else imwrite(rgb2ind(M(j).cdata,map),map,\'out.gif\',\'WriteMode\',\'append\',\'DelayTime\',.1) end end VideoWriter(M,\'out.avi\')
前面画图的
clc;close all;clear; %% x = 0:0.05:20*pi; y = sin(x); figure(1) curve = animatedline(\'color\',\'r\',\'linestyle\',\'-.\',\'linewidth\',2,\'marker\',\'o\'); set(gca,\'XLim\',[0,20*pi],\'YLim\',[-1,1]); grid on legend(\'Anmiated Sine\') for i =1:length(x) addpoints(curve,x(i),y(i)) % drawnow limitrate %the command ‘limitrate\' is used to speed up the plot speed pause(0.01) %reduce the plotspeed end %% 3D plot z = 0:0.05:10; y = sin(2*z); x = cos(2*z); figure(2) curve = animatedline(\'linewidth\',3,\'color\',\'b\'); set(gca,\'XLim\',[-1.5,1.5],\'YLim\',[-1.5,1.5],\'ZLim\',[0 10]); grid on hold on view(43,24); % viewpiont for i =1:length(z) addpoints(curve,x(i),y(i),z(i)) head =scatter3(x(i),y(i),z(i),\'filled\',\'MarkerFaceColor\',\'g\',\'MarkerEdgeColor\',\'r\'); drawnow % pause(0.01) %reduce the plotspeed % delete(head); end %% x = 0:0.05:20*pi; y = sin(x); figure curve = animatedline(\'color\',\'r\',\'linestyle\',\'-.\',\'linewidth\',2,\'marker\',\'o\'); set(gca,\'XLim\',[0,20*pi],\'YLim\',[-1,1]); grid on legend(\'Anmiated Sine\') for k =1:11:length(x)-10 xvec = x(k:k+10); yvec = y(k:k+10); addpoints(curve,xvec,yvec) drawnow end %} %% creating a video z = 0:0.05:10; y = sin(2*z); x = cos(2*z); figure curve = animatedline(\'linewidth\',2,\'color\',\'b\'); set(gca,\'XLim\',[-1.5,1.5],\'YLim\',[-1.5,1.5],\'ZLim\',[0 10]); grid on hold on view(43,24); % viewpiont % title(\'Melix\'); % set(gcf,\'Units\',\'normalized\',\'OuterPosition\',[0 0 1 1]); % using larger view figure ,set(gcf) 获得图片 for i =1:length(z) addpoints(curve,x(i),y(i),z(i)) head =scatter3(x(i),y(i),z(i),\'MarkerFaceColor\',\'b\',\'MarkerEdgeColor\',\'r\'); % head =scatter3(x(i),y(i),z(i),\'filled\',\'MarkerFaceColor\',\'b\',\'MarkerEdgeColor\',\'r\'); drawnow F(i) = getframe(gcf); % pause(0.01) %reduce the plotspeed delete(head); title([\'t = \',num2str(i)]) end video = VideoWriter(\'helix.avi\'); % video = VideoWriter(\'helix.avi\',\'Uncompressed AVI\'); % \'Uncompressed AVI\', you can chose other video type with smaller size such as \'MPEG-4\' video.FrameRate = 60; video.Quality = 90;%视频质量,默认75,取值[0,100] open(video) writeVideo(video,F); close(video) %% Creating Movies and Animation in matlab %Christopher Lum %[email protected] %Illustrate animation in Matlab %This file is designed to accompany the YouTube video at https://youtu.be/3I1_5M7Okqo clear clc close all %% Step 1: Generate Data %Animate a point moving along a 3D parametric curve t = linspace(0,2*pi,100); x = 5*cos(t); y = 2*sin(t); z = t; %% Step 2: Draw/Render Scenario figh = figure; for k=1:length(t) %Clear the figure to start with a blank slate clf % clean the figure marker everytime %Extract data at the current time step t_k = t(k); x_k = x(k); y_k = y(k); z_k = z(k); %Where is the current point? plot3(x_k, y_k, z_k, \'go\', \'LineWidth\', 3, \'MarkerSize\', 15) %Plot the entire curve hold on plot3(x, y, z, \'b-\', \'LineWidth\', 2); %Add plotting options grid on xlabel(\'x\') ylabel(\'y\') zlabel(\'z\') title([\'t = \',num2str(t_k)]) % view([30 35]) view([30+20*t_k 35]) %show how viewpoint can be manipulated %% Step 3: Take a Snapshot % force Matlab to Draw the image at this point % drawnow % pause(0.01) %Save the frame % movieVector(k) = getframe; movieVector(k) = getframe(figh, [10 10 520 400]); %manually specify getframe region %% Step 4: Advance Time %Happens automatically if using a for loop end %% Step 5: Save Movie %Create a VideoWriter object and set properties myWriter = VideoWriter(\'curve\'); %create an .avi file % myWriter = VideoWriter(\'curve\',\'MPEG-4\'); %create an .mp4 file myWriter.FrameRate = 20; %Open the VideoWriter object, write the movie, and close the file open(myWriter); writeVideo(myWriter, movieVector); close(myWriter); disp(\'DONE!\') %% Step 1: Generate Data 没有旋转的 %Animate a point moving along a 3D parametric curve t = linspace(0,2*pi,100); x = 5*cos(t); y = 2*sin(t); z = t; %% Step 2: Draw/Render Scenario figure; for k=1:length(t) %Clear the figure to start with a blank slate clf %clean the figure marker everytime %Extract data at the current time step t_k = t(k); x_k = x(k); y_k = y(k); z_k = z(k); %Where is the current point? plot3(x_k, y_k, z_k, \'go\', \'LineWidth\', 3, \'MarkerSize\', 15) %Plot the entire curve hold on plot3(x, y, z, \'b-\', \'LineWidth\', 2); %Add plotting options grid on xlabel(\'x\') ylabel(\'y\') zlabel(\'z\') title([\'t = \',num2str(t_k)]) % view([30 35]) view([30 35]) %% Step 3: Take a Snapshot % force Matlab to Draw the image at this point % drawnow % pause(0.01) %Save the frame movieVector(k) = getframe; %% Step 4: Advance Time %Happens automatically if using a for loop end %% Step 5: Save Movie %Create a VideoWriter object and set properties myWriter = VideoWriter(\'curve2\'); %create an .avi file % myWriter = VideoWriter(\'curve\',\'MPEG-4\'); %create an .mp4 file myWriter.FrameRate = 20; %Open the VideoWriter object, write the movie, and close the file open(myWriter); writeVideo(myWriter, movieVector); close(myWriter); disp(\'DONE!\') %{ clear;clc; [x,y]=meshgrid(-8:0.1:8); for j=1:10 f=@(x,y)(sin(sqrt((11-j)*(x.^2+y.^2)))./sqrt((11-j)*(x.^2+y.^2)+eps)); z=f(x,y); surf(x,y,z);shading interp; M(j) = getframe; if j==1 [I,map]=rgb2ind(M(j).cdata,256); imwrite(I,map,\'out.gif\',\'DelayTime\',0.1) else imwrite(rgb2ind(M(j).cdata,map),map,\'out.gif\',\'WriteMode\',\'append\',\'DelayTime\',0.1) end end VideoWriter(M,\'out.avi\') %}
上述画GIF的代码:
clc;close all;clear; %% x = 0:0.05:8*pi; y = sin(x); fig = figure(1) curve = animatedline(\'color\',\'r\',\'linestyle\',\'-.\',\'linewidth\',2,\'marker\',\'o\');%指定线条特性 set(gca,\'XLim\',[0,8*pi],\'YLim\',[-1,1]); grid on legend(\'Anmiated Sine\') for i =1:length(x) addpoints(curve,x(i),y(i)) drawnow %下面是用来画出GIF动画的 frame = getframe(fig); fm{i} = frame2im(frame); filename = \'test1_sin(x).gif\'; %文件名称 [A,map] = rgb2ind(fm{i},256); if i == 1 imwrite(A,map,filename,\'gif\',\'LoopCount\',Inf,\'DelayTime\',1); else imwrite(A,map,filename,\'gif\',\'WriteMode\',\'append\',\'DelayTime\',1); end end x = 0:0.05:8*pi; y = sin(x); figure(2) curve = animatedline(\'color\',\'r\',\'linestyle\',\'-.\',\'linewidth\',2,\'marker\',\'o\');%指定线条特性 set(gca,\'XLim\',[0,8*pi],\'YLim\',[-1,1]); grid on legend(\'Anmiated Sine\') for i =1:length(x) addpoints(curve,x(i),y(i)) %drawnow drawnow limitrate %the command ‘limitrate\' is used to speed up the plot speed %pause(0.001) %每执行一次命令就暂停0.001s %下面是用来画出GIF动画的 frame = getframe; fm{i} = frame2im(frame); filename = \'test2_sin(x).gif\'; %文件名称 [A,map] = rgb2ind(fm{i},256); if i == 1 imwrite(A,map,filename,\'gif\',\'LoopCount\',Inf,\'DelayTime\',1); else imwrite(A,map,filename,\'gif\',\'WriteMode\',\'append\',\'DelayTime\',1); end end x = 0:0.05:8*pi; y = sin(x); figure(3) curve = animatedline(\'color\',\'r\',\'linestyle\',\'-.\',\'linewidth\',2,\'marker\',\'o\'); set(gca,\'XLim\',[0,8*pi],\'YLim\',[-1,1]); grid on legend(\'Anmiated Sine\') for k =1:11:length(x)-10 xvec = x(k:k+10);%一次多添加几个点 yvec = y(k:k+10); addpoints(curve,xvec,yvec) drawnow %下面是用来画出GIF动画的 frame = getframe; fm{k} = frame2im(frame); filename = \'test3_sin(x).gif\'; %文件名称 [A,map] = rgb2ind(fm{k},256); if k == 1 imwrite(A,map,filename,\'gif\',\'LoopCount\',Inf,\'DelayTime\',1); else imwrite(A,map,filename,\'gif\',\'WriteMode\',\'append\',\'DelayTime\',1); end end x = 0:0.05:8*pi; y = sin(x); figure(4) curve = animatedline(\'color\',\'r\',\'linestyle\',\'-.\',\'linewidth\',2,\'marker\',\'o\');%指定线条特性 set(gca,\'XLim\',[0,8*pi],\'YLim\',[-1,1]); grid on legend(\'Anmiated Sine\') for i =1:length(x) addpoints(curve,x(i),y(i)) pause(0.001) %每执行一次命令就暂停0.001s %下面是用来画出GIF动画的 frame = getframe; fm{i} = frame2im(frame); filename = \'test4_sin(x).gif\'; %文件名称 [A,map] = rgb2ind(fm{i},256); if i == 1 imwrite(A,map,filename,\'gif\',\'LoopCount\',Inf,\'DelayTime\',1); else imwrite(A,map,filename,\'gif\',\'WriteMode\',\'append\',\'DelayTime\',1); end end h = animatedline; axis([0,2*pi,-1,1]) numpoints = 10000; x = linspace(0,2*pi,numpoints); y = sin(x); a = tic; % 启动计时 for k = 1:numpoints addpoints(h,x(k),y(k)) b = toc(a); % 查看时间 if b > (1/10) drawnow % 每1/10 seconds刷新一次图像,更新时间越短,动画越慢 a = tic; % 每次更新后重置计时器 end %下面是用来画出GIF动画的 frame = getframe; fm{k} = frame2im(frame); filename = \'test5_sin(x).gif\'; %文件名称 [A,map] = rgb2ind(fm{k},256); if k == 1 imwrite(A,map,filename,\'gif\',\'LoopCount\',Inf,\'DelayTime\',1); else imwrite(A,map,filename,\'gif\',\'WriteMode\',\'append\',\'DelayTime\',1); end end drawnow % 画出最后一帧图像 %% 3D plot z = 0:0.05:10; y = sin(2*z); x = cos(2*z); figure(2) curve = animatedline(\'linewidth\',3,\'color\',\'b\'); set(gca,\'XLim\',[-1.5,1.5],\'YLim\',[-1.5,1.5],\'ZLim\',[0 10]); grid on hold on view(43,24); % viewpiont for i =1:length(z) addpoints(curve,x(i),y(i),z(i)) head =scatter3(x(i),y(i),z(i),\'filled\',\'MarkerFaceColor\',\'g\',\'MarkerEdgeColor\',\'r\'); drawnow % pause(0.01) %reduce the plotspeed %下面是用来画出GIF动画的 frame = getframe; fm{i} = frame2im(frame); filename = \'test6_sin(x).gif\'; %文件名称 [A,map] = rgb2ind(fm{i},256); if i == 1 imwrite(A,map,filename,\'gif\',\'LoopCount\',Inf,\'DelayTime\',1); else imwrite(A,map,filename,\'gif\',\'WriteMode\',\'append\',\'DelayTime\',1); end end %} z = 0:0.05:10; y = sin(2*z); x = cos(2*z); figure(2) curve = animatedline(\'linewidth\',3,\'color\',\'b\'); set(gca,\'XLim\',[-1.5,1.5],\'YLim\',[-1.5,1.5],\'ZLim\',[0 10]); grid on hold on view(43,24); % viewpiont for i =1:length(z) addpoints(curve,x(i),y(i),z(i)) head =scatter3(x(i),y(i),z(i),\'filled\',\'MarkerFaceColor\',\'g\',\'MarkerEdgeColor\',\'r\'); drawnow % pause(0.01) %reduce the plotspeed %下面是用来画出GIF动画的 frame = getframe; fm{i} = frame2im(frame); filename = \'test8_sin(x).gif\'; %文件名称 [A,map] = rgb2ind(fm{i},256); if i == 1 imwrite(A,map,filename,\'gif\',\'LoopCount\',Inf,\'DelayTime\',1); else imwrite(A,map,filename,\'gif\',\'WriteMode\',\'append\',\'DelayTime\',1); delete(head); end end x = 0:0.01:1; n = 3; y = x.^n; plot(x,y,\'LineWidth\',3) title([\'y = x^n, n = \' num2str(n) ]) n = 1:0.5:5; nImages = length(n); fig = figure; for idx = 1:nImages y = x.^n(idx); plot(x,y,\'LineWidth\',3) title([\'y = x^n, n = \' num2str( n(idx)) ]) drawnow frame = getframe(fig); im{idx} = frame2im(frame); pause(0.4) end close; figure; for idx = 1:nImages subplot(3,3,idx) imshow(im{idx}); end filename = \'testAnimated.gif\'; % Specify the output file name for idx = 1:nImages [A,map] = rgb2ind(im{idx},256); if idx == 1 imwrite(A,map,filename,\'gif\',\'LoopCount\',Inf,\'DelayTime\',1); else imwrite(A,map,filename,\'gif\',\'WriteMode\',\'append\',\'DelayTime\',1); end end
未完待续~~~
没办法好像插入的视频,不显示哎!