主要是查看matlab帮助的Animation动画页⾯1、函数
播放录制的电影桢
将轴或图形捕获为影⽚帧
返回与电影帧相关联的图像数据
将图像转换为电影帧
创建动画线
⼆维彗星图
三维彗星图
更新数据并处理回调
指定数据源后刷新图中的数据
线动画
2、官⽅例⼦
(1)画出sin(x)图像,并且追踪⼀个点
%%%创建sinx
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 %将轴限制模式设置为⼿动,以避免在整个动画循环中重新计算限制。%%%使⽤drawnow动态画图for k = 2:length(x) p.XData = x(k); p.YData = y(k); drawnowend
(2)画出sin(x)图像,追踪⼀个点,显⽰坐标变换
%%%画出sin(x)图像x = linspace(-6,6,1000);y = sin(x);plot(x,y)axis manual
%%%设置图⽚格式ax = gca;
h = hgtransform('Parent',ax);hold on
plot(x(1),y(1),'o','Parent',h);hold off
t = text(x(1),y(1),num2str(y(1)),'Parent',h,... 'VerticalAlignment','top','FontSize',14);
%%%使⽤drawnow动态画图for k = 2:length(x)
m = makehgtform('translate',x(k)-x(1),y(k)-y(1),0); h.Matrix = m;
t.String = num2str(y(k)); drawnowend
(3)这个例⼦展⽰了如何通过更新三⾓形的数据属性来让⼀个三⾓形在圆的内部循环。绘制圆并设置轴限制,以便在两个⽅向上的数据单位是相同的。
%%%绘制
theta = linspace(-pi,pi);xc = cos(theta);yc = -sin(theta);plot(xc,yc);axis equal
%%%动态显⽰xt = [-1 0 1 -1];yt = [0 0 0 0];hold on
t = area(xt,yt); % initial flat trianglehold off
for j = 1:length(theta)-10
xt(2) = xc(j); % determine new vertex value yt(2) = yc(j);
t.XData = xt; % update data properties t.YData = yt;
drawnow limitrate % display updatesend
(4)这个例⼦展⽰了如何创建两条⽣长线的动画。animatedline函数可以帮助您优化⾏动画。它允许您在不重新定义现有点的情况下向⾏添加新点。
%创建两条不同颜⾊的动画线。 然后,将点添加到循环中的线上。 在循环之前设置轴极限,以免每次通过循环都重新计算极限。 添加新点后,请使⽤drawow或drawow limitrate命%令在屏幕上显⽰更新。
a1 = animatedline('Color',[0 .7 .7]);a2 = animatedline('Color',[0 .5 .5]);axis([0 20 -1 1])
x = linspace(0,20,10000);for k = 1:length(x); % first line xk = x(k);
ysin = sin(xk);
addpoints(a1,xk,ysin); % second line ycos = cos(xk);
addpoints(a2,xk,ycos); % update screen drawnow limitrateend
(5)这些⽰例展⽰了如何将动画记录为可以重放的电影
%在⼀个循环中创建⼀系列的情节,并将每个情节捕获为⼀个框架。通过每次在循环中设置轴限制,确保轴限制保持不变。将帧存储在M中。for k = 1:16
plot(fft(eye(k+16))) axis([-1 1 -1 1]) M(k) = getframe;end
%使⽤短⽚功能播放短⽚五次。figure
movie(M,5)
%捕获电影的整个⼈物在图的左侧包括⼀个滑块。 通过将图形指定为getframe函数的输⼊参数来捕获整个图形窗⼝figure
u = uicontrol('Style','slider','Position',[10 50 20 340],... 'Min',1,'Max',16,'Value',1);for k = 1:16
plot(fft(eye(k+16))) axis([-1 1 -1 1]) u.Value = k;
M(k) = getframe(gcf);end
%把电影回放五遍。电影在当前轴中回放。创建⼀个新的图形和⼀个轴来填充图形窗⼝,使电影看起来像原来的动画。figure
axes('Position',[0 0 1 1])movie(M,5)
(6)创建流粒⼦动画,流粒⼦动画对于可视化⽮量场的流向和速度很有⽤。 “粒⼦”(由任何线标记表⽰)跟踪沿特定流线的流量。 动画中每个粒⼦的速度与沿流线任意给定点的⽮量场的⼤⼩成⽐例。
%1.指定数据范围的起点
%本⽰例通过指定适当的起点来确定要绘制的体积区域。 在这种情况下,流图从x = 100开始,y在z = 5平⾯中跨越20到50,这不是完整的体积边界load wind
[sx sy sz] = meshgrid(100,20:2:50,5);
%2.创建流线以指⽰粒⼦路径
%本⽰例使⽤流线(stream3,streamline)跟踪动画粒⼦的路径,从⽽为动画添加了可视背景。verts = stream3(x,y,z,u,v,w,sx,sy,sz);sl = streamline(verts);
%3.定义视图
%尽管所有流线均始于z = 5平⾯,但某些流的值逐渐降低到较低的值。 以下设置提供了动画的清晰视图:选定的视点(视图)显⽰了包含最多流线的平⾯和螺旋线。%选择[2 2 0.125]的数据纵横⽐(daspect)可在z⽅向上提供更⾼的分辨率,以使流粒⼦更容易在螺旋形中看到。设置轴限制以匹配数据限制(轴)并绘制轴框(框)。view(-10.5,18)
daspect([2 2 0.125])axis tight;
set(gca,'BoxStyle','full','Box','on')
%4.计算流粒⼦顶点
%确定沿流线绘制粒⼦的顶点。 interpstreamspeed函数根据流线顶点和⽮量数据的速度返回此数据。 本⽰例将速度缩放0.05,以增加插值顶点的数量。%将轴SortMethod属性设置为childorder,以便动画运⾏更快。%streamparticles函数设置以下属性:
%设置为10动画,以运⾏10次动画。启⽤“ ParticleAlignment”以⼀起开始所有粒⼦轨迹。将MarkerEdgeColor设置为none可仅绘制圆形标记的⾯。 当未绘制标记边缘时,动画通常运⾏得更快。%MarkerFaceColor为红⾊。o的标记,绘制⼀个圆形标记。 您也可以使⽤其他线标记。iverts = interpstreamspeed(x,y,z,u,v,w,verts,0.01);set(gca,'SortMethod','childorder');streamparticles(iverts,15,... 'Animate',10,...
'ParticleAlignment','on',... 'MarkerEdgeColor','none',... 'MarkerFaceColor','red',... 'Marker','o');
因篇幅问题不能全部显示,请点此查看更多更全内容