2012-05-19 5 views
4

J'ai un ensemble de coordonnées (x,y) qui décrivent la trajectoire d'un objet. Je voudrais animer cette trajectoire en utilisant GNU Octave.Animer la trajectoire en utilisant Octave

L'ensemble de données étant assez volumineux, je ne pourrai pas redessiner l'ensemble du tracé à chaque itération si je souhaite que l'animation soit fluide. Quelles sont les fonctions qui me permettent de "mettre à jour" un graphique plutôt que de le redessiner?

En outre, j'ai un autre ensemble de (vx,vy) points, qui décrivent la vitesse de l'objet. J'aimerais que ma trajectoire animée prenne en compte la vitesse. Quelle fonction dois-je utiliser pour que le programme dorme pendant quelques millisecondes pour que la trajectoire s'anime à la même vitesse que l'objet?

(je sais déjà Octave a des fonctions telles que comet, mais je dois écrire mon propre animateur.)


Edit: Voici ce que j'ai jusqu'à présent. Je m'attendais à ce que cela fonctionne trop vite et exige de moi d'utiliser pause, mais il est encore assez lent (x et y ont 10001 éléments).

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 

Répondre

4

Vous pouvez utiliser la commande set changer seulement les XData et YData données pour un certain objet parcelle 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 

Les pauses de commande pause(x) pour x secondes, ce qui peut être inférieur à 1.

+0

Merci, 'pause' est utile, mais' set' n'est pas ce que je veux. Je veux que la trace de la trajectoire reste. Je voudrais savoir s'il y a une fonction qui peut mettre à jour la trace de l'intrigue, plutôt que de redessiner un seul point. –

+0

Je suppose que je ne sais pas exactement ce que vous voulez animer. Voulez-vous tracer une ligne (la trajectoire) et animer un objet se déplaçant le long de cette ligne? Voulez-vous mettre à jour la ligne elle-même? – andyras

+0

Je veux mettre à jour la ligne elle-même. –

0

Je pense que vous recherchez la commande "hold". tenir l'intrigue conserve toutes les données précédentes sur l'intrigue et les nouvelles données sont ajoutées en haut.

+3

'hold' ne permet pas la suppression des données précédentes sur le tracé. Lorsque vous animez un graphique, vous souhaitez souvent ajouter des données et supprimer d'autres données. 'hold' est généralement utilisé pour tracer plusieurs séries de données sur un seul graphique. – ronalchn

Questions connexes