Matlab使用animatedline函数绘制动画

4.3
(4)

今天,我们将开始讲解Matlab中可以创建绘制动画的几个函数。动画线条,可以很直观的感受到数据的变化。这一点,有助于更好的理解数据。

本文,我们主要讲解Matlab animatedline函数的常见用法、语法说明、显示线条动画、指定动画线条颜色、设置最大点数、向集合中添加点以产生快速动画、使用 drawnow limitrate 创建快速动画、控制动画速度等用法。

Matlab使用animatedline函数绘制动画

下面,我们首先给出Matlab中关于animatedline函数的帮助文档如下:

>> help animatedline
 animatedline Create animated line
    animatedline creates an animated line that has no data and adds it to
    the current axes. Add points to the line in a loop to create a line
    animation.
    
    Use ADDPOINTS, GETPOINTS, and CLEARPOINTS to add more points, retrieve
    the points, and clear the points from the animated line, respectively.
  
    animatedline(x,y) creates an animated line with initial data points
    defined by x and y. Specify x and t as scalars or vectors.
  
    animatedline(x,y,z) creates an animated line with initial data points
    defined by x , y, and z. Specify x, y, and z as scalars or vectors.
  
    animatedline(...,Name,Value) specifies animated line properties using
    one or more Name,Value pair arguments. For example, 'Color','r' sets
    the line color to red. Use this option with any of the input argument
    combinations in the previous syntaxes.
 
    animatedline(container,...) creates the animated line in the axes,
    group, or transform specified by container, instead of in the current
    axes.
 
    H = animatedline(...) returns the animated line object created.
 
    Execute GET(H), where H is an animated line object, to see a list of
    animatedline object properties and their current values.
    Execute SET(H) to see a list of animated line object properties and
    legal property values.
 
    Example: 
    numpoints = 100000; 
    x = linspace(0,4*pi,numpoints); 
    y = sin(x); 
  
    figure 
    h = animatedline; 
    axis([0,4*pi,-1,1]) 
  
    for k = 1:numpoints 
      addpoints(h,x(k),y(k)) 
      drawnow update 
    end 

常见用法

an = animatedline
an = animatedline(x,y)
an = animatedline(x,y,z)
an = animatedline(___,Name,Value)
an = animatedline(ax,___)

语法说明

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

an = animatedline(x,y) 创建一根包含由 x 和 y 定义的初始数据点的动画线条。

an = animatedline(x,y,z) 创建一根包含由 x、y 和 z 定义的初始数据点的动画线条。

an = animatedline(_,Name,Value) 使用一个或多个名称-值对组参数指定动画线条属性。例如,’Color’,’r’ 将线条颜色设置为红色。在前面语法中的任何输入参数组合后使用此选项。

an = animatedline(ax,_) 将在由 ax 指定的坐标区中,而不是在当前坐标区中创建线条。请在前面任何语法中的所有其他输入参数之前指定 ax。

显示线条动画

创建初始动画线条对象。然后,通过循环向线条中添加 1,000 个点。在添加每个新点后,使用 drawnow 在屏幕上显示该新点。

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

x = linspace(0,4*pi,1000);
y = sin(x);
for k = 1:length(x)
    addpoints(h,x(k),y(k));
    drawnow
end
Matlab使用animatedline函数绘制动画

要加快渲染速度,可在每次遍历循环时向线条中添加多个点或使用 drawnow limitrate。

查询线条中的点。

[xdata,ydata] = getpoints(h);

清除线条中的点。

clearpoints(h)
drawnow
Matlab使用animatedline函数绘制动画

指定动画线条颜色

将动画线条的颜色设置为红色并将其线宽设置为 3 磅。

x = [1 2];
y = [1 2];
h = animatedline(x,y,'Color','r','LineWidth',3);
Matlab使用animatedline函数绘制动画

设置最大点数

将动画线条中的点数限制为 100 个。通过循环一次向线条中添加一个点。当线条包含 100 个点时,向线条添加新点会删除最旧的点。

h = animatedline('MaximumNumPoints',100);
axis([0,4*pi,-1,1])

x = linspace(0,4*pi,1000);
y = sin(x);
for k = 1:length(x)
    addpoints(h,x(k),y(k));
    drawnow
end
Matlab使用animatedline函数绘制动画

向集合中添加点以产生快速动画

通过循环向动画线条中添加 100,000 个点。由于点的数目很大,因此每次通过循环向线条中添加一个点可能很慢。改为每次通过循环向线条中添加 100 个点以产生更快的动画。

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

numpoints = 100000;
x = linspace(0,4*pi,numpoints);
y = sin(x);
for k = 1:100:numpoints-99
    xvec = x(k:k+99);
    yvec = y(k:k+99);
    addpoints(h,xvec,yvec)
    drawnow
end
Matlab使用animatedline函数绘制动画

另一种用于创建更快动画的技术是使用 drawnow limitrate 代替 drawnow。

使用 drawnow limitrate 创建快速动画

通过循环向动画线条中添加 100,000 个点。由于点的数目很大,因此通过 drawnow 显示更改可能很慢。改用 drawnow limitrate 可以产生更快的动画。

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

numpoints = 100000;
x = linspace(0,4*pi,numpoints);
y = sin(x);
for k = 1:numpoints
    addpoints(h,x(k),y(k))
    drawnow limitrate
end
Matlab使用animatedline函数绘制动画

控制动画速度

在屏幕上绘制更新之前先运行动画循环的多个迭代,以此来控制动画速度。在 drawnow 太慢或 drawnow limitrate 太快时可以使用此技术。

例如,每 1/30 秒更新一次屏幕。使用 tic 和 toc 命令可跟踪屏幕更新间经过的时间。

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
Matlab使用animatedline函数绘制动画

更小的时间间隔会使屏幕更新更频繁,从而产生更慢的动画。例如,使用 b > (1/1000) 可以减慢动画速度。

共计4人评分,平均4.3

到目前为止还没有投票~

很抱歉,这篇文章对您没有用!

让我们改善这篇文章!

告诉我们我们如何改善这篇文章?

文章目录

转载文章,原文出处:MathWorks官网,由古哥整理发布

如若转载,请注明出处:https://iymark.com/articles/2139.html

(8)
微信公众号
古哥的头像古哥管理团队
上一篇 2021年03月16日 20:39
下一篇 2021年03月18日 19:36

你可能感兴趣的文章

发表回复

登录后才能评论
微信小程序
微信公众号