Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Bücher:

MATLAB und Simulink: Grundlegende Einführung f. Studenten

Studierende:
weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Mitlaufende xline in einem Subplot

 

jens.ru
Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 19.11.13
Wohnort: Baunach
Version: R2019b
     Beitrag Verfasst am: 12.12.2019, 11:43     Titel: Mitlaufende xline in einem Subplot
  Antworten mit Zitat      
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.6 0.0 0.4 1]);
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',[0 0 0.6 1]);
g = hgtransform;
p = patch(g, faces, vertices, lighting, ...)
for i=1:size(matrix,1)
g.Matrix = makehgtform(irgendwas)
end
 


ich habe bereits versucht,

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?

Besten Dank im Voraus!
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 21.202
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.12.2019, 11:49     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
in der for schleife s11.xline(i) funktioniert nicht.

Wenn, dann
Code:
xline(s11, i)

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
jens.ru
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 19.11.13
Wohnort: Baunach
Version: R2019b
     Beitrag Verfasst am: 12.12.2019, 12:05     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für die superschnelle Antwort!

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?

Besten Dank
Jens
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 21.202
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.12.2019, 12:11     Titel:
  Antworten mit Zitat      
Hallo,

du hast das Problem ja schon erkannt.

Wenn du nur den Wert der Linie aktualisiert, sollte es deutlich schneller gehen:
Code:
axis([-10 10 -10 10])
xl = xline(-10);
for k = -9.99:0.01:10
    xl.Value = k;
    drawnow
end


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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
jens.ru
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 19.11.13
Wohnort: Baunach
Version: R2019b
     Beitrag Verfasst am: 12.12.2019, 12:17     Titel:
  Antworten mit Zitat      
Bombig!

Vielen vielen Dank!!!
Private Nachricht senden Benutzer-Profile anzeigen
 
jens.ru
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 19.11.13
Wohnort: Baunach
Version: R2019b
     Beitrag Verfasst am: 15.01.2020, 11:10     Titel:
  Antworten mit Zitat      
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...
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 21.202
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.01.2020, 22:39     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2020 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.