MATLAB

2011-04-16 46 views
5

içinde bir eğri boyunca hareket eden noktalar Bir eğri boyunca hareket eden bir noktayı göstermek için bana verilen bir kod parçasını düzenlemeyi başardım.MATLAB

Bu eğri boyunca hareket eden iki bağımsız nokta oluşturmak veya grafikte hareket eden başka bir nokta gösteren ikinci bir rakam oluşturmak için bunu düzenlemenin bir yolunu bulmaya çalışıyorum. Ana nokta, noktaların birbirinden bağımsız olması ve böylece bir algoritmanın bunlara uygulanabilmesidir.

Şu anda eğri boyunca hareket eden tek bir noktayı verir Aşağıdaki kodu vardır:

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

cevap

2

Burada ilk noktanın bağımsız ucundan kayar başlar başka bir noktayı ekleyebilir nasıl. Kodunuzda

, çizgi %#Infinite loop önce, aşağıdakileri ekleyin:

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

Yani ikinci nokta slaytlar:

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

ve döngü içine

, drawnow komutundan önce, aşağıdakileri ekleyin aşağı ve ilk slaytlar yukarı. hLine2 ve hTxt2 enter image description here

tanımında istediğiniz gibi nokta için yörünge tanımlayabilirsiniz.