2012-05-31 2 views
2

Я пытаюсь создать короткую анимацию в MatLab, используя команду movie. Анимация должна нарисовать круг. Однако, когда я запускаю следующий скрипт, знак «o» просто случайно перемещается вокруг окна фигуры, не оставляя следа позади.Сделать фильм в MatLab

z = linspace(0,2*pi,100); 
nframes = length(z); 
Frames = moviein(nframes); 
for i = 1:nframes 
    x = cos(i); 
    y = sin(i); 
    plot(x,y,'o','erase','none'); 
    Frames(:,i) = getframe; 
    pause(0.25); 
end 
movie(Frames,1) 

Если кто-нибудь может объяснить мне, почему сценарий работает неправильно, я был бы очень признателен!

+0

Что делает аргумент «стереть» в вызове 'plot'? – Hassan

+0

Я подумал, что, возможно, я должен включить его, чтобы знак «o» не исчез, когда цикл начинается. Но я полагаю, что это избыточно? – Kristian

+0

Я бы попробовал и посмотрю, какое поведение вы получите. – Hassan

ответ

5

Это рисует круг. Надеюсь, поможет.

z = linspace(0,2*pi,100); 
nframes = length(z); 
Frames = moviein(nframes); 
for i = 1:nframes 
    x = cos(2*pi*i/nframes); 
    y = sin(2*pi*i/nframes); 
    plot(x,y,'o'); 
    hold on 
    Frames(:,i) = getframe; 
    pause(0.01); 
end 
movie(Frames,1) 
+1

Фантастический! Большое спасибо. Понимаю, я должен был вспомнить, как включить «держись». – Kristian

2

Возможно, вы захотите пройти через вектор z. Попробуйте изменить x = cos(i) на x = cos(z(i)) и то же самое с y = sin(i).

+0

Спасибо за ваш вклад! Тем не менее, я все еще получаю ту же проблему. – Kristian

+0

Если вы хотите, чтобы точки придерживались графика, попробуйте выполнить команду 'hold on;' после вызова 'plot'. – andresuribe

+0

Да, спасибо, я только что получил такую ​​же информацию выше :). Я очень ценю вашу помощь! – Kristian

0

Довольно поздно с этим, но я надеюсь, что это может быть полезным для кого-то там ... Я ищу в пути анимировать точки на окружности и, хотя я не понял его Тем не менее, я заметил что-то в предлагаемом коде выше, что может сделать ваш круг более круговым. после установки

hold on 

если добавить еще одну строку, чтобы просто сказать

axis('equal'); 

вы получите оси, масштаб с сюжетом и поэтому ваш круг не поврежден в зависимости от размеров окна фигуры.