2011-04-16 4 views
5

J'ai réussi à éditer un morceau de code qui m'a été donné afin de montrer un point se déplaçant le long d'une courbe. J'essaye de trouver un moyen d'éditer ceci afin de créer deux points indépendants se déplaçant le long de cette courbe ou pour créer un deuxième chiffre qui montre un autre point se déplaçant le long d'un graphique. Le point principal est que les points doivent être indépendants les uns des autres afin qu'un algorithme puisse leur être appliqué.Points se déplaçant le long d'une courbe dans MATLAB

J'ai actuellement le code suivant qui donne un seul point se déplaçant le long de la courbe:

%# control animation speed 
DELAY = 0.01; 
numPoints = 600; 

%# create data 
x = linspace(0,1,numPoints); 
f = 5; 
C = 1-exp(-f); 
y = C*(1-(exp(-f*x))); 

%# plot graph 
figure('DoubleBuffer','on')     %# no flickering 
plot(x,y, 'LineWidth',2), grid on 
xlabel('x'), ylabel('y'), title('') 

%# create moving point + coords text 
hLine = line('XData',x(1), 'YData',y(1), 'Color','r', ... 
     'Marker','o', 'MarkerSize',6, 'LineWidth',2); 
hTxt = text(x(1), y(1), sprintf('(%.3f,%.3f)',x(1),y(1)), ... 
    'Color',[0.2 0.2 0.2], 'FontSize',8, ... 
    'HorizontalAlignment','left', 'VerticalAlignment','top'); 



%# infinite loop 
i = 1;          %# index 
while true   
    %# update point & text 
    set(hLine, 'XData',x(i), 'YData',y(i))  
    set(hTxt, 'Position',[x(i) y(i)], ... 
     'String',sprintf('(%.3f,%.3f)',[x(i) y(i)]))   
    drawnow         %# force refresh 
    %#pause(DELAY)       %# slow down animation 

    i = rem(i+1,numPoints)+1;    %# circular increment 
    if ~ishandle(hLine), break; end   %# in case you close the figure 
end 

Répondre

2

Voilà comment vous pouvez ajouter un autre point qui commence à glisser à l'extrémité indépendante du premier point.

Dans votre code, avant la ligne %#Infinite loop, ajouter ce qui suit:

hLine2 = line('XData',x(end), 'YData',y(end), 'Color','g', ... 
     'Marker','o', 'MarkerSize',6, 'LineWidth',2); 
hTxt2 = text(x(end), y(end), sprintf('(%.3f,%.3f)',x(1),y(1)), ... 
    'Color',[0.2 0.2 0.2], 'FontSize',8, ... 
    'HorizontalAlignment','left', 'VerticalAlignment','top'); 

et à l'intérieur de la boucle, avant la commande drawnow, ajoutez la ligne suivante:

set(hLine2, 'XData',x(end-i), 'YData',y(end-i))  
    set(hTxt2, 'Position',[x(end-i) y(end-i)], ... 
     'String',sprintf('(%.3f,%.3f)',[x(end-i) y(end-i)])) 

Ainsi, votre deuxième diapositives point vers le bas et le premier glisse vers le haut. Vous pouvez définir la trajectoire du point comme vous le souhaitez dans la définition de hLine2 et hTxt2 enter image description here

Questions connexes