MATLAB中繪製質點軌跡動圖並儲存成GIF

來源:互聯網
上載者:User

標籤:速度   二維   .com   連續   matlab   clean up   使用   技術   mat   

工作需要在MATLAB中繪製質點軌跡並儲存成GIF以便展示。

繪製質點軌跡動圖可用comet和comet3命令,使用例子如下:

t = 0:.01:2*pi;
x = cos(2*t).*(cos(t).^2);
y = sin(2*t).*(sin(t).^2);
z = t;
comet(x,y,0.1);  %繪製二維
%comet3(x,y,z,0.1);  %繪製三維

這有一個問題在於comet或comet3無法控制繪製的動畫的速度,為了實現這一點,一個可行的方法是重寫comet和comet3,在每一個for迴圈中增加:

pause(interval)

其中interval可以是使用者輸入的每幀的時間間隔。

為了實現一邊繪製動圖,一邊儲存成GIF動畫,我的實現方法是重寫comet和comet3,具體如下:

在每個for迴圈的末尾增加:

frame = getframe(gcf);
im = frame2im(frame);
[imind,cm] = rgb2ind(im,256);
if GifImCount == 1;
imwrite(imind,cm,filename,‘gif‘,‘DelayTime‘,interval, ‘Loopcount‘,inf);
else
imwrite(imind,cm,filename,‘gif‘,‘DelayTime‘,interval, ‘WriteMode‘,‘append‘);
end
GifImCount = GifImCount + 1;

其中GifImCount在程式初始設為0,filename為要儲存的gif檔案的名稱。原先for迴圈中的drawnow語句可以去掉,因為getframe本身就會調用drawnow函數。

但是這樣有一個問題,就是這樣只能擷取當前幀的動畫,尾跡消失了,即無法得到連續的動畫效果。這個問題我初始想肯定是getframe裡面某處擦除了圖形,可以通過修改getframe來解決,但是還是沒有解決。最後找到一個權宜之計,那就是重寫comet和comet3函數時,不進行原先的body和tail的分別繪製,將comet和comet3中的“% Grow the body”和“% Clean up the tail”兩部分去掉,只留“% Primary loop”部分,並稍做如下修改:

% Primary loop
for i = 1:m
set(head,‘xdata‘,x(i),‘ydata‘,y(i))
set(tail,‘xdata‘,x(1:i),‘ydata‘,y(1:i))
frame = getframe(gcf);
im = frame2im(frame);
[imind,cm] = rgb2ind(im,256);
if GifImCount == 1;
imwrite(imind,cm,filename,‘gif‘,‘DelayTime‘,interval, ‘Loopcount‘,inf);
else
imwrite(imind,cm,filename,‘gif‘,‘DelayTime‘,interval, ‘WriteMode‘,‘append‘);
end
GifImCount = GifImCount + 1;
end

大意是每次繪製都重繪從1到i的點。通過以上的修改,大致能夠實現在MATLAB中繪製質點軌跡動圖並儲存成GIF的效果。

 下面是效果:

如果你有更好的方法,請告知我,謝謝!

 

MATLAB中繪製質點軌跡動圖並儲存成GIF

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.