2015-04-07 3 views
1

Я использую Octave для написания скрипта, который отображает функцию в разные периоды времени. Я надеялся создать анимацию сюжетов, чтобы увидеть изменения во времени.Создание анимации с несколькими графиками - Octave/Matlab

Есть ли способ сделать это, чтобы, возможно, сохранить каждый сюжет за каждый раз в некотором роде, чтобы каждый сюжет мог быть скомбинирован для создания этой анимации?

Заранее благодарим за консультацию!

+0

В MATLAB, есть 'getframe' функция. Это также существует в Октаве? – hbaderts

+0

Используйте цикл и обновите график на каждой итерации? –

+0

Я делаю это, но я просто рисую каждую функцию на одном и том же сюжете (не анимированный). Кроме того, это не позволяет мне сохранять последовательные графики в качестве анимации. – user3460758

ответ

3

Это немного ляп, но вы можете сделать следующее (здесь работает с октаву 4.0.0-RC2):

x = (-5:.1:5); 
for p = 1:5 
    plot (x, x.^p) 
    print animation.pdf -append 
endfor 
im = imread ("animation.pdf", "Index", "all"); 
imwrite (im, "animation.gif", "DelayTime", .5) 

В принципе, печатать все графики в формате PDF, по одному на страницу. Затем прочитайте pdf-файлы в виде изображений и распечатайте их как gif. Это не будет работать на Matlab (его реализация imread не может обрабатывать pdf).

+0

Хорошо, отлично, я попробую. – user3460758

+0

Хм, конечно, не совсем то, что я ищу ... Я хотел бы сохранить его в какой-то файл фильма, а также добавить в презентацию – user3460758

+0

@ user3460758 определить видеофайл? У вас нет звука, только изображение, поэтому gif должен преуспеть. Он также должен отображаться как анимация внутри презентации. Обратите внимание, что вы можете использовать LoopCount, чтобы он не циклировал анимацию и даже использовал массив как DelayTime для разных временных интервалов. Какова ваша проблема с решением? – carandraug

3

Это создает анимированный GIF

data=rand(100,100,20); %100 by 100 and 20 frames 

%data go from 0 to 1, so lets convert to 8 bit unsigned integers for saving 
data=data*2^8; 
data=uint8(data); 

%Write the first frame to a file named animGif.gif 
imwrite(data(:,:,1),'/tmp/animGif.gif','gif','writemode','overwrite',... 
     'LoopCount',inf,'DelayTime',0); 

%Loop through and write the rest of the frames 
for ii=2:size(data,3) 
    imwrite(data(:,:,ii),'/tmp/animGif.gif','gif','writemode','append','DelayTime',0) 
end 
Смежные вопросы