2011-11-20 29 views
1

我想用C++中的4個粒子編寫一個簡單的N體重力模擬。我將4個粒子的位置以4x2矩陣的形式輸出到標有「time_X.mat」(其中X = 1,2,3 ....表示時間戳)的.mat文件中,其中 i'th行表示在時間X時第i個粒子的(x,y)cooridinates。使用點數據在MATLAB中創建一個簡單的N體模擬電影

現在對於特定的時間步驟我可以將.mat文件加載到MATLAB中,並獲得矩陣中點的散點圖,顯示了我的粒子位置。但是我想從time_X.mat文件的所有.mat文件/分散圖中創建一個電影,它顯示了4個粒子系統的演變。我應該怎麼做在MATLAB?

+0

您是否閱讀過關於動畫的幫助頁面? http://www.mathworks.co.uk/help/techdoc/creating_plots/f10-1460.html –

+0

你在問如何製作獨立電影(* .avi,* .mov或類似),或者如何製作獨立電影在Matlab中動畫/可視化它? – Pursuit

+0

是的,我在問如何製作一部獨立電影 – smilingbuddha

回答

0

首先,您必須製作模擬的每個時間步的幀(圖像)。

既然你有笛卡爾座標,你必須將你的x和y座標轉換爲像素索引,並從它們製作圖像矩陣。有關如何執行此操作的示例,請參閱我的answer相關問題。您也可以修改代碼以使點大於像素,具有形狀等,可能用strel[a,b,~] = sphere(N)

一旦你的框架,你可以很容易地使一個AVI文件(無壓縮或MPEG)在MATLAB:

aviOutput = fullfile('path','to','file.avi'); 
aviobj = VideoWriter(aviOutput); 
aviobj.Quality = 100; 
aviobj.FrameRate = 24; %# arbitrary 
open(aviobj); 
for i=1:length(frames) 
    writeVideo(aviobj,frames{i}); %# or frames(:,:,i) etc. 
end 
close(aviobj); 

更新上述

假定時間步驟都可以使用。例如:

files = dir('path/to/dir'); 
files(1:2) = []; %# . and .. 
orderedfiles = cell(length(files),1); 
for i=1:length(files) 
    ind = sscanf(files(i).name,[name '%*[_]%u%*s']); 
    orderedfiles{ind+1} = files(i).name; 
end 
timeSteps = zeros(numPoints,2,length(orderedfiles)); 
for i=1:length(orderedfiles) 
    temp = load(orderedfiles(i).name); 
    timeSteps(:,:,i) = temp.matrixName %# All the same name? 
end 

從鏈接答案的代碼寫入到兩個向量xy與座標,您將獲得與timeSteps(:,1,i)timeSteps(:,2,i),併爲每個時間段做工作。

相關問題