2013-05-15 4 views
5

Ich versuche, diese Spirale mit Matlab/Oktave animieren ich es will Spirale nach oben oder untenbelebtes Grundstück/Bahn in Matlab/Oktave

t = 0:0.1:10*pi; 
r = linspace (0, 1, numel (t)); 
z = linspace (0, 1, numel (t)); 
plot3 (r.*sin(t), r.*cos(t), z); 

spiral

Ich habe versucht, ein mit for-Schleife animieren, aber das gibt mir nur eine Kegelform siehe Code und Bild unter

clear all, clc,clf,tic 
t = 0:0.1:10*pi; 
r = linspace (0, 1, numel (t)); 
z = linspace (0, 1, numel (t)); 

for ii=1:length(r) 
    ii 
    plot3 (r.*sin(t(ii)), r.*cos(t(ii)), z); 
    hold on 
    %pause (.00001) 
end 

Bild enter image description here

+1

Überprüfen Sie diese Antwort: http://stackoverflow.com/questions/16426378/how-to-animate-this-3d-plot-in-matlab/16426623#16426623 –

Antwort

1

Folgendes erscheint in Octave 3.6.2

t = 0:0.1:10*pi; 
r = linspace (0, 1, numel (t)); 
z = linspace (0, 1, numel (t)); 

figure 
axis([-1 1 -1 1 0 1]) 
hold on 

for ii=1:length(r) 
    plot3 (r(ii)*sin(t(ii)), r(ii)*cos(t(ii)), z(ii),'*'); 
    pause (.001) 
end 
+1

Das ist nett, obwohl es keine Flugbahn, nur eine Abfolge von Punkten bietet. Eine Lösung, die eine Trajektorie animiert, finden Sie unter http://stackoverflow.com/a/17773313/181638. –

1

Sicherlich nicht das Schönste, aber das sind die ersten Änderungen, die Sie an Ihrem Code vornehmen müssen, damit er etwas tun kann, das Ihren Vorstellungen entspricht.

t = 0:0.1:10*pi; 
z = linspace (1, 0, numel (t)); 
for ii=1:length(t) 
    plot3 (z(ii)*sin(t(ii)),z(ii)*cos(t(ii)), z(ii)); 
    hold on 
    pause (.00001) 
end 
+0

Davin Dies gibt mir nur einen Fehler "Zeile 0 : * Alle * Kanten nicht definiert oder außerhalb des Bereichs, daher keine Zeichnung. " –

+0

@RickT, habe noch nie zuvor eine Oktave benutzt, ich mache es auf Matlab, vermutlich ist es dann ein Kompatibilität/Versions-Problem. Sie können versuchen, die Zeile 'clear ...' hinzuzufügen oder 'plot3' durch' scatter3' zu ersetzen, vielleicht hilft das. Wenn nicht, habe ich keine Ideen mehr. – davin

2

Sie könnten auch die comet3() Paket verwenden zu arbeiten, die die Flugbahn durch die Handlung beseelt:

delay = 0.001 % seconds 
figure 
comet3(r.*sin(t), r.*cos(t), z, delay); 

Dieses beseelt ein kontinuierliche Trajektorie, die ich über eine diskrete Folge von * bevorzuge.

Der eine Nachteil ist, dass die Version von comet und comet3, die mit Octave 3.6.4 geliefert wurden, langsam sind, unabhängig von der Verzögerung, die Sie verwenden.

% plot the first point to get started 
h = plot3(x(1),y(1),z(1),"b"); 
axis([min(x), max(x), min(y), max(y), min(z), max(z)]); 

% refresh the plot in a loop through the rest of the data 
for k = 1:length(z); 
    set(h, 'XData', x(1:k)); 
    set(h, 'YData', y(1:k)); 
    set(h, 'ZData', z(1:k)); 
    pause (0.001); % delay in seconds 
     % alternatively could provide a velocity function 
     % pause(sqrt(vx(k)^2+vy(k)^2+vz(k)^2)); 
endfor 

Minor Anmerkung: Aber dies kann unter Verwendung des folgenden Trick mit freundlicher Genehmigung von andyras in this SO question überwunden werden, wenn Sie die Funktion geändert haben, werden Sie Octave zwingen müssen, um es neu zu laden as it won't do this by default. Sie können entweder neu starten oder besser noch clear comet und clear comet3 verwenden. Wenn diese Funktionen das nächste Mal aufgerufen werden, werden ihre Definitionen aktualisiert.