Создание фильма в MATLAB с точечными данными для простой симуляции N-тела - PullRequest
1 голос
/ 20 ноября 2011

Я пытаюсь написать простое моделирование гравитации с четырьмя частицами в C ++. Я выводю позиции 4 частиц в файлы .mat с меткой «time_X.mat» (где X = 1,2,3 .... обозначает метку времени) в виде матрицы 4x2, где i-я строка указывает (x, y) координаты i-й частицы в момент времени X.

Теперь для конкретного временного шага я могу загрузить файл .mat в MATLAB и получить диаграмму рассеяния точек в матрице, показывая мне положение частиц. Но я хотел бы создать фильм из всех файлов .mat / scatter-plots файлов time_X.mat, который показывает мне эволюцию системы из 4 частиц. Как мне это сделать в MATLAB?

1 Ответ

0 голосов
/ 20 ноября 2011

Сначала вы должны сделать кадры (изображения) каждого временного шага вашего моделирования.

Поскольку у вас есть декартовы координаты, вы должны преобразовать свои координаты x и y в индексы пикселей и создать матрицу изображенияот них.См. Мой ответ на соответствующий вопрос для примера того, как это сделать.Вы также можете изменить код так, чтобы ваши точки были больше пикселя, имели формы и т. Д., Возможно, с помощью 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

Код из связанного ответа написан для работы с двумя векторами x и y с координатами, которые вы получите с помощью timeSteps(:,1,i) и timeSteps(:,2,i), иделать для каждого временного шага.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...