玖叶教程网

前端编程开发入门

「MATLAB画图技巧」:动图画法,分享

1.修改Line对象的属性值

可以直接利用plot函数返回的Line对象,通过向修改对象的XData,YData,ZData等属性,然后利用pause暂停画面,即可实现动态图片。同时,可以利用getframe函数捕获当前plot画面,写入成gif文件

% 画椭圆 x*x/4 + y*y/3 = 1的切线
a = 12*cos(0:2*acos(1/3):200*pi)+9i*sin(0:2*acos(1/3):200*pi);
figure();
h = plot(a(1));
axis equal
axis([-12,12,-9,9]);
[A,map] = rgb2ind(frame2im(getframe),256);
imwrite(A,map,'1.gif','LoopCount',65535,'DelayTime',0.1);
for ii = 1:length(a)
    h.XData(ii) = real(a(ii));
    h.YData(ii) = imag(a(ii));
    [A,map] = rgb2ind(frame2im(getframe),256);
    imwrite(A,map,'1.gif','WriteMode','append','DelayTime',0.1);
    pause('on')
    pause(0.2)
end

下面是导出的gif文件,与plot函数的画面一样。

2. animatedline创建动画线条

animatedline是一个动画线条对象,通过addpoints函数向其中添加点数,实现动画效果。

% 阿基米德螺线
theta = 0:0.01:50;
y = theta.*exp(1i*theta);
figure();
h = animatedline(real(y(1)),imag(y(1)));
axis equal;
axis([-50,50,-50,50]);
axis off

[A,map] = rgb2ind(frame2im(getframe),256);
imwrite(A,map,'2.gif','LoopCount',65535,'DelayTime',0.01);
for k = 2:length(theta)
    addpoints(h,real(y(k)),imag(y(k)));
    drawnow
    if(mod(k,20)==0)
        [A,map] = rgb2ind(frame2im(getframe),256);
        imwrite(A,map,'2.gif','WriteMode','append','DelayTime',0.01);
    end
end

3.利用回调函数暂停动图

利用回调函数,可以在按下鼠标、键盘时触发特定操作。比如,下面命令能够实现在图中空白处单击鼠标键,暂停动图5秒。

% 替换1,2中的figure()语句
figure('ButtonDownFcn',@(src,event) pause(5));

注意,上述命令只是在plot窗口暂停了5秒,gif文件中不会暂停。如果要实现gif文件中也暂停,可以使用timer对象,相对复杂很多。

感谢点赞、关注、收藏,您的支持是我回复的最大动力~哦

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言