Verfasst am: 12.12.2019, 10:43
Titel: Mitlaufende xline in einem Subplot
Hallo!
Ich habe in einem Fenster eine animierte Matrix-Transformation. Eine Kombination aus hgtransform, patch und makehgtform in einer for-schleife arbeitet soweit mittlerweile recht zuverlässig
Nun möchte ich in einem zweiten Fenster die Graphen x,y und z visualisieren, die dem Bewegungsablauf zugrunde liegen, auch das funktioniert. Als nächstes aber möchte ich eine mitlaufende xline (oder etwas vergleichbares) haben, die durch die Graphen läuft und veranschaulicht, an welchem Punkt meine Simulation gerade ist. Das Konstrukt sieht in etwa so aus:
Code:
f2 = figure('units','normalized','outerposition',[0.60.00.41]);
s21 = subplot(3,1,1)
b = plot(matrix(:,1))
s22 = subplot(3,1,2);
b = plot(matrix(:,2))
s23 = subplot(3,1,3);
b = plot(matrix(:,3))
f1 = figure('units','normalized','outerposition',[000.61]);
g = hgtransform;
p = patch(g, faces, vertices, lighting, ...) for i=1:size(matrix,1)
g.Matrix = makehgtform(irgendwas) end
s11 = subplot(3,1,1)
und in der for schleife s11.xline(i) funktioniert nicht.
das gleiche für
p1 = plot(matrix(:,1)
p1.xline(i)
Vielleicht muss ich dazu sagen, dass der Inhalt von figure1 zwar funktioniert, ich aber nicht so wirklich weiß, was da vor sich geht und warum es überhaupt animiert ist, obwohl ich meine Schleife ja sehr viel später erst berechne...
Gibt es anhand meiner "Vorarbeit" und meiner Informationen irgendeine Möglichkeit, mein Problem zu lösen?
Das würde eine vertikale Linie für x = i im Subplot s11 erstellen.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Hat funktioniert, aaaber...ist es normal, dass die Performance damit absolut flöten geht?
Außer drei xlines habe ich keinerlei Veränderung gemacht und eine 28s Animation habe ich dann nach etwa 20% Fortschritt abgebrochen, nachdem eine Minute weit überschritten war.
Vermutlich besteht ein kausaler Zusammenhang zur nächsten Frage...die Linie wurde nicht gelöscht, sondern immer eine neue dazu"addiert", sodass mein Graph von links nach rechts mit einem schwarzen Balken übezogen wurde...
Kannst du mir auch hier einen Schritt in Richtung Lösung sagen?
Solltest du den bereits vergangenen Bereich markieren wollen, würde ich patch empfehlen und auch da "nur" die Daten austauschen.
Wenn das immer noch zu langsam ist, dann würde ich die xline nicht in jeder Iteration aktualisieren.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Nachdem das nun alles viel zu gut funktioniert hat, gibt es nun eine erweiterte Problemstellung.
Die Linie läuft in drei Graphen mit. Dafür habe ich drei Linien definiert, xline_x, xline_y, xline_z, der ich jeweils einen Parent zugeordnet habe, plotbox_x, plotbox_y und plotbox_z und in einer Schleife jeweils mit %10 aktualisiere. Ist dieser Aufwand überhaupt nötig? Kann ich eine xline_universal in mehrere plots zeichnen, da ja alle drei den gleichen Wert besitzen? Und gibt es eine Möglichkeit, die Linie/n "greifbar" zu machen? Also quasi die Animation händisch zu kontrollieren? Eine xline, die sich gerade bei Frame 200 befindet, mit der Maus zu packen und auf Frame 1000 zu ziehen und einen Callback auszuwerten, der den aktuellen Frame ausgibt?
Vielen vielen Dank für die unbezahlbare Hilfe bisher! Da dies meine ersten Gehversuche mit Matlab sind und das Projekt vielleicht doch ein wenig zu umfangreich für mein Wissen bin ich leider darauf angewiesen, oftmals ein wenig unbeholfen nachfragen zu müssen...
Kann ich eine xline_universal in mehrere plots zeichnen, da ja alle drei den gleichen Wert besitzen?
Nicht dass ich wüsste. Das ax kann jedenfalls nur ein Skalar sein.
Zitat:
Und gibt es eine Möglichkeit, die Linie/n "greifbar" zu machen? Also quasi die Animation händisch zu kontrollieren? Eine xline, die sich gerade bei Frame 200 befindet, mit der Maus zu packen und auf Frame 1000 zu ziehen und einen Callback auszuwerten, der den aktuellen Frame ausgibt?
Wenn, dann wohl über die ButtonDownFcn. Das könnte aber etwas aufwändiger werden. Einfacher wäre es, einen Slider unter den Graphen zu platzieren.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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.