2016-03-23 6 views
0

Ich versuche, die Trajektorien von ein paar Teilchen in 2D auf Matlab zu simulieren. Ich habe die x- und y-Koordinaten dieser Teilchen als Funktion der Zeit, die ich als Matrix x und y speichern kann. Die Spalte sowohl in x als auch in y entspricht der Zeit, während die Zeile der Partikelzahl entspricht: 1, 2, etc.Matlab Animation von mehreren Punkten gleichzeitig

Ich weiß, wie man die Animation für ein Partikel mit Pause macht, aber ich weiß nicht wie Anpassen des Codes für die Trajektorien mehrerer Partikel. Im Grunde ist meine Idee, dass ich auf der ersten Handlung 3 Marker habe, die der ursprünglichen Position der Partikel entsprechen, sagen wir Partikel A, B und C. Dann möchte ich der Bewegung dieser 3 Marker folgen, und hier ist wo ich auf das Problem gestoßen bin: Ich weiß nicht, wie ich die nachfolgenden Punkte nach der Teilchenidentität sortieren soll. Zum Beispiel möchte ich den ersten Punkt, den ich im zweiten Zeitpunkt als Partikel A zeichne, den zweiten Punkt als Partikel B und den dritten Punkt in Partikel C angeben. Ich habe etwas ähnliches getan, aber in meiner Simulation, die Anzahl der Teilchen 100 sein, was es unpraktisch x1 zu schaffen macht, x2, ..., x100, y1, y2, ..., Y100 für die Animation zu arbeiten:

y = rand(3, 20); % Generate random sample data. 
x = rand(size(y, 1), size(y, 2)); 
% Now we have x and y sample data and we can begin. 
% Extract into separate arrays 
x1 = sort(x(1,:)); 
x2 = sort(x(2,:)); 
x3 = sort(x(3,:)); 
y1 = y(1,:); 
y2 = y(2,:); 
y3 = y(3,:); 
for k = 1 : length(x1) 
    plot(x1(1:k), y1(1:k), 'r*-', 'LineWidth', 2); 
    xlim([min(x(:)), max(x(:))]); 
    ylim([min(y(:)), max(y(:))]); 
    grid on; 
    hold on; 
    plot(x2(1:k), y2(1:k), 'g*-', 'LineWidth', 2); 
    plot(x3(1:k), y3(1:k), 'b*-', 'LineWidth', 2); 
    hold off; 
    fprintf('Plotted points 1 through %d\n', k); 
    pause(0.8); 
end 

Irgendwelche Ideen oder Vorschläge wird sehr geschätzt!

+0

Werfen Sie einen Blick auf diese [Antwort] (http://stackoverflow.com/questions/31781277/how-can-i-visualize-the-tracking-of-every-non-zero-elements-in-a-a- 2d-matrix/31784703 # 31784703), enthält ein Beispiel, wie mehrere Punkte gleichzeitig animiert werden können. – Hoki

Antwort

0

Um alle Graphen gleichzeitig zu zeichnen, könnten wir ein 2D-Array erstellen.

Unten ist ein Beispiel.

y = rand(3, 20); % Generate random sample data. 
x = rand(size(y, 1), size(y, 2)); 
% Now we have x and y sample data and we can begin. 
% Extract into separate arrays 
x = sort(x'); 
y=y'; 

M=size(x); 
N=M(2); 

for k = 1 : length(x) 
    if k==1; 

     zeroPad=zeros(1,N); 
     x0=[zeroPad;x(1,1:N)]; 
     y0=[zeroPad;y(1,1:N)]; 
     plot(x0(1:2,1:N), y0(1:2,1:N), '*', 'LineWidth', 2); 

    else 
     plot(x(1:k,1:N), y(1:k,1:N), '*-', 'LineWidth', 2); 

    end 
    xlim([min(x(:)), max(x(:))]); 
    ylim([min(y(:)), max(y(:))]); 

    grid on; 
    fprintf('Plotted points 1 through %d\n', k); 
    pause(0.8); 
end 

Ein Trick wurde hinzugefügt.

Bei der ersten Iteration fügte ich Nullen vor x und y hinzu.

Einige unnötige Codes wurden entfernt.

+0

Danke! Ein kleines Problem: Es scheint eine Linie zu geben, die alle Anfangspunkte im ersten Frame verbindet. Gibt es eine Möglichkeit, diese Linie los zu werden? – user6101792