matlab動態繪圖Animation


主要是查看matlab幫助的Animation動畫頁面

1、函數

movie 播放錄制的電影楨
getframe 將軸或圖形捕獲為影片幀
frame2im 返回與電影幀相關聯的圖像數據
im2frame 將圖像轉換為電影幀
animatedline 創建動畫線
comet 二維彗星圖
comet3 三維彗星圖
drawnow 更新數據並處理回調
refreshdata 指定數據源后刷新圖中的數據
Animated Line 線動畫

 

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); drawnow end

(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));
    drawnow
end

  

  (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 triangle
hold 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 updates
end

  

(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 limitrate
end

  

(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');

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM