2011-04-16 12 views
5

He logrado editar un fragmento de código que me fue entregado para mostrar un punto moviéndose a lo largo de una curva.Puntos que se mueven a lo largo de una curva dentro de MATLAB

Estoy tratando de encontrar una forma de editar esto para crear dos puntos independientes que se muevan a lo largo de esta curva o para crear una segunda figura que muestre otro punto moviéndose a lo largo de un gráfico. El punto principal es que los puntos deben ser independientes entre sí para que se les pueda aplicar un algoritmo.

Actualmente tengo el siguiente código que le da un único punto que se mueve a lo largo de la curva:

%# 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 

Respuesta

2

Así es como se puede añadir otro punto que comienza a deslizarse desde el final independiente del primer punto.

En su código, antes de la línea %#Infinite loop, añada lo siguiente:

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'); 

y dentro del bucle, antes del comando drawnow, añadir las siguientes:

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)])) 

por lo que sus diapositivas segundo punto abajo y el primero se desliza hacia arriba. Puede definir la trayectoria del punto como desee en la definición de hLine2 y hTxt2 enter image description here

Cuestiones relacionadas