您现在的位置是:首页 >学无止境 >MATLAB绘制动画(二)擦除动画网站首页学无止境

MATLAB绘制动画(二)擦除动画

matlab练习生 2024-06-17 10:22:08
简介MATLAB绘制动画(二)擦除动画

如果我们在绘制图形之后将原有的图形擦除,并重新绘制,看上去就像动画了
示例:

t = 0;
m = [sin(t);cos(t)];
p = plot(t,m,'EraseMode','background','MarkerSize',5);
x = -1.5*pi;
axis([x x+2*pi -1.5 1.5]);
grid on

for i = 1:100
    t = [t 0.1*i];
    m = [m [sin(0.1*i);cos(0.1*i)]];
    set(p(1),'XData',t,'YData',m(1,:));
    set(p(2),'XData',t,'YData',m(2,:));
    drawnow
    x = x+0.1;
    axis([x x+2*pi -1.5 1.5]);
    pause(0.2);
end

可以看出:

图形不断重新绘制,每次绘制时横坐标x增加,坐标轴的范围同步变化,视觉上就像是不断向前平移。

这里

%p = plot(t,m,'EraseMode','background','MarkerSize',5);

不再是绘制二维曲线,而是得到曲线句柄(可以理解为标记这条曲线)

同时,我们设置曲线的擦除格式EraseMode为background,方便后续擦除

这里,介绍一下曲线的擦除格式:

有三种:

none:重新绘制图形对象时不擦除原有的对象,可以演示图形的生成,效果类似于我们上一篇中介绍的质子动画

background:也就是我们在这次使用的模式,在重新绘制时会擦除原有的对象。需要注意的是,擦除的不只是曲线句柄指向原有的对象,也包括它下面的任何图形

xor:擦除且仅擦除原有的对象本身

在:

%set(p(2),'XData',t,'YData',m(2,:));

语句,我们设置更新曲线数据,也就是擦除并重画的命令。

注意,在新的MATLAB版本中,运行上述代码会出现以下提示:

警告: EraseMode 属性不再受支持,而且在以后的版本中会出错。

也就是说,这个绘图方式不是现在鼓励使用的了,想要达到同样的效果我们可以使用这个函数代替:

% addpoints();  

函数能够向 an 指定的动画线条中添加 x 和 y 定义的点。

使用 animatedline 函数创建一根动画线条。

要在屏幕上显示更新,请使用 drawnow 或 drawnow limitrate。

新点会自动连接到之前的点。

使用格式:

% addpoints(an,x,y)
% addpoints(an,x,y,z)

搭配使用的为animatedline函数:创建一根没有任何数据的动画线条并将其添加到当前坐标区中。通过使用addpoints 函数循环向线条中添加点来创建动画。

使用格式:

%an = animatedline
%an = animatedline(x,y)
%an = animatedline(x,y,z)

举个例子:

clear;
close all
h = animatedline;
axis([0,4*pi,-1,1])

x = linspace(0,4*pi,100);
y = sin(x);
for k = 1:length(x)
    addpoints(h,x(k),y(k));
    drawnow
end

查询线条中的点。

[xdata,ydata] = getpoints(h);

清除线条中的点。

clearpoints(h)
drawnow

输出的动画如下:

演示视频

参考《高等光学仿真——光波导、激光》

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。