ich benötige eure Hilfe beim Erstellen einer 2D-Animation.
Und zwar lasse ich mir in einer Simulation einen Vektor mit 78 Einträgen als structure with time ausgeben. Nun möchte ich diese Einträge in einem 2D-Plot plotten, jedoch soll sich mit der Zeit der geplottete Vektor ändern. Eine typische Animation eben.
Das Problem das ich nun habe ist, dass ich ganze 30.000 Vektoren bei einer Simulationszeit von 0.2 Sekunden habe und das Video in etwa 10 Sekunden lang sein soll. Der Simulations-Solver ist ein zeitvariabler Solver (ode23t), weshalb es irgendwie doof ist, jeden x-ten Eintrag aus dem Struct zu nehmen.
Habt ihr eine Idee, wie sich das am besten umsetzen lässt? Gibt es vielleicht eine in Matlan/Simulink integrierte Funktion für dieses Problem?
da könnte deval() helfen. Damit kannst du das Ergebnis des ode-solvers zu bestimmten Zeiten Auswerten, wenn dir die adaptiven Zeitschritte ein Problem darstellen.
Damit man das testen kann, wären immer Beispieldaten gut.
Zudem kann es sich lohnen, dein F zu initilaisieren http://www.mathworks.com/matlabcent.....ive-structs-from-getframe und statt so vielen plot-befehlen, nur ein mal den plot-befehl zu schreiben und dann nur noch die Y-Daten zu aktualisieren.
Es kann sein, dass es so funktioniert, sonst musst du noch etwas dran arbeiten.
Code:
xKoord = 2:6:75;
daten_erweitert = rand(450,90);
vout.time = 1:450;
t = 1:30:length(vout.time);
T = length(t);
F = struct('cdata', cell(1,T+1), 'colormap', cell(1,T+1));
f = figure;
h = plot(xKoord, daten_erweitert(1,2:6:75));
for ii=t(2:end) set(h, 'ydata', daten_erweitert(ii,2:6:75)) drawnow
F(ii)= getframe;
end
Viele Dank dafür!
Das sieht auf jeden Fall um einiges geschickter aus
Man merkt wohl, dass ich vor einem Monat noch nachschauen musste, wie man eine Matrix erzeugt
Die Zeitschritte stellen tatsächlich ein Problem dar. Ich habe mir mal in jedem Plot die aktuelle Zeit anzeigen lassen. Die Geschwindigkeit, mit der sich die Zeit ändert, varriiert sehr stark. Also les ich mich mal in deval() ein.
Nochmal: Besten Dank, Nras!
Martin_student_gast
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 16.07.2014, 11:04
Titel: P
Habe jetzt erst gesehen, dass ich Beispieldaten erwünscht sind. Aber wie lade ich hier die Daten hoch, wenn .mat nicht erlaubt ist? Gibt es noch eine andere Möglichkeit meine Daten zu speichern?
Zum Editieren von Beiträgen muss man sich wahrscheinlich anmelden, richtig?
ja, ich denke, dass man zum Editieren angemeldet sein muss.
Sonderlich wichtig sind die Daten hier vermutlich nicht, ich habe ja schon Beispieldaten erzeugt. Ansonsten kannst du die .mat Datei archivieren und dann hochladen.
Aber was funktioniert denn bei dem Beispiel bei dir nicht?
Viele Grüße,
Nras.
Martin_student_gast
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 16.07.2014, 15:05
Titel:
Das Ploten funktioniert tadellos.
Aber das Problem ist nun wirklich, dass die Vektoren zeitlich nicht äquidistant sind. Den deval()-Befehl kann ich anscheinend nicht nutzen, weil ich meine Daten über den To Workspace-Block aus dem Simulink-Modell erhalte.
Habt ihr sonst noch Ideen?
Sonst muss ich das wohl irgendwie händisch umsetzen.
ich nutze kein Simulink, da kann ich dir leider nicht helfen, vielleicht kannst du die Frage ja spezieller formulieren und im Simulink Unterforum danach fragen.
Viele Grüße,
Nras.
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.