2012-05-19 6 views
4

У меня есть набор координат (x,y), которые описывают траекторию объекта. Я хотел бы оживить эту траекторию с помощью GNU Octave.Анимация траектории с использованием Octave

Набор данных довольно большой, поэтому я не буду перерисовывать весь график на каждой итерации, если я хочу, чтобы анимация была гладкой. Какие функции позволяют мне «обновлять» сюжет, а не перерисовывать его?

Кроме того, у меня есть еще один набор (vx,vy) точек, которые описывают скорость объекта. Я бы хотел, чтобы моя анимированная траектория учитывала скорость. Какую функцию следует использовать для спящего режима программы в течение нескольких миллисекунд, чтобы сделать анимацию траектории с той же скоростью, что и объект?

(я уже знаю, октава имеет такие функции, как comet, но мне нужно, чтобы написать свой собственный аниматора.)


Edit: Вот что у меня до сих пор. Я ожидал, что это произойдет слишком быстро и потребует от меня использовать pause, но он все еще довольно медленный (x и y имеют 10001 элемент).

bounds = [min(x) max(x) min(y) max(y)]; 
axis(bounds); 

hold on 
for k = 2 : length(x) 
    plot(x(k-1:k), y(k-1:k)); 
    drawnow("expose"); 
end 
hold off 

ответ

4

Вы можете использовать команду set изменить только данные XData и YData для определенного участка объекта h:

h = plot(my_xdata(0),my_ydata(0)) 
for i_=1:length(my_xdata) 
    set(h, 'YData', my_ydata(i_)) 
    set(h, 'XData', my_xdata(i_)) 
    pause(sqrt(vx(i_)^2+vy(i_)^2)) 
end 

The pause(x) команду паузы для x секунд, который может быть меньше, чем 1.

+0

Спасибо, 'пауза' полезна, но' set' - это не то, что я хочу. Я хочу, чтобы след траектории оставался. Я хотел бы знать, есть ли функция, которая может обновлять трассировку графика, а не перерисовывать одну точку. –

+0

Думаю, я не совсем понимаю, что вы хотите оживить. Вы хотите построить линию (траекторию) и оживить объект, перемещающийся вдоль этой линии? Вы хотите обновить строку самостоятельно? – andyras

+0

Я хочу обновить строку. –

0

Я думаю, что вы ищете команду «удержать». удерживая график, сохраняются все предыдущие данные на графике, и новые данные добавляются сверху.

+3

'hold' не позволяет удалить предыдущие данные на графике. Когда вы анималируете график, вы часто хотите добавить некоторые данные, а также удалить некоторые другие данные. 'hold' обычно используется для построения нескольких рядов данных на одном графике. – ronalchn

Смежные вопросы