2017-07-23 3 views
1

Ich versuche, ein animiertes Diagramm von Dreiecken zu erstellen, und das Endergebnis sollte zehn Dreiecke sein, gefolgt von zwei größeren Dreiecken, gefolgt von einer geraden Linie. Mit Hilfe der matlab documentation, landete ich dies mit bis, welche Ergebnisse eine animierte sin Grundstück:Animierte Handlung in Matlab

h = animatedline; 
axis([0 4*pi -1 1]) 
x = linspace(0,4*pi,2000); 

for k = 1:length(x) 
    y = sin(x(k)); 
    addpoints(h,x(k),y); 
    drawnow 
end 

Das Problem ist, dass die Handlung ist wirklich langsam und sobald ich y=sin(x(k)) zu einer dreieckigen Form geändert, es wurde noch schlimmer. Gibt es eine bessere Möglichkeit, eine animierte Handlung zu machen oder zumindest die Geschwindigkeit anzupassen? (Wenn die Geschwindigkeit nicht abhängig von dem Computer ist)

Antwort

0

Sie comet Funktion prüfen können die Kurve zu animieren:

t = linspace(0,4*pi,2000); 
comet(t, sin(t)); 

Es wäre glatt und einfacher, eine Kurve zu animieren (siehe seine documentation). Auch für 3D-Kurven können Sie comet3 verwenden.

0

Sie können es ein wenig von

  • Computing einen y Vektor auf einmal, statt der Berechnung jeden Wert in der Schleife beschleunigen.
  • Aktualisierung der XData und YData Eigenschaften eines plot, anstatt animatedline zu verwenden.

Der Code wird:

h = plot(NaN,NaN); 
axis([0 4*pi -1 1]) 
x = linspace(0,4*pi,2000); 
y = sin(x); 

for k = 1:length(x) 
    set(h, 'XData', x(1:k), 'YData', y(1:k)) 
    drawnow 
end 

Der Gewinn an Geschwindigkeit klein ist, though. Wenn Sie mehr Geschwindigkeit benötigen, müssen Sie wahrscheinlich die Anzahl der Punkte verringern.