今天,我们将开始讲解Matlab中可以创建绘制动画的几个函数。动画线条,可以很直观的感受到数据的变化。这一点,有助于更好的理解数据。
本文,我们主要讲解Matlab animatedline函数的常见用法、语法说明、显示线条动画、指定动画线条颜色、设置最大点数、向集合中添加点以产生快速动画、使用 drawnow limitrate 创建快速动画、控制动画速度等用法。
下面,我们首先给出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
要加快渲染速度,可在每次遍历循环时向线条中添加多个点或使用 drawnow limitrate。
查询线条中的点。
[xdata,ydata] = getpoints(h);
清除线条中的点。
clearpoints(h) drawnow
指定动画线条颜色
将动画线条的颜色设置为红色并将其线宽设置为 3 磅。
x = [1 2]; y = [1 2]; h = animatedline(x,y,'Color','r','LineWidth',3);
设置最大点数
将动画线条中的点数限制为 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
向集合中添加点以产生快速动画
通过循环向动画线条中添加 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
另一种用于创建更快动画的技术是使用 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
控制动画速度
在屏幕上绘制更新之前先运行动画循环的多个迭代,以此来控制动画速度。在 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
更小的时间间隔会使屏幕更新更频繁,从而产生更慢的动画。例如,使用 b > (1/1000) 可以减慢动画速度。
转载文章,原文出处:MathWorks官网,由古哥整理发布
如若转载,请注明出处:https://iymark.com/articles/2139.html