WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Plot mit Animation in App Designer

 

timlie
Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 03.12.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.12.2020, 10:54     Titel: Plot mit Animation in App Designer
  Antworten mit Zitat      
Hallo liebe Community,

Ich poste die Frage im GUI Forum, da ich den Plot in App Designer realisieren muss.
Ich habe in App Designer einen Patchplot erstellt. Nun will ich in diesem Patchplot zusätzlich eine Animation ablaufen lassen. Bei der Animation hätte ich jedoch gerne, dass die Dicke der Linie zu den Proportionen meines Plots passt. D.h wenn die Linie 2 Einheiten breit ist, soll sie im Plot auch 2 Einheiten breit sein. Die Achsen sind in Pixels, "LineWidth" bei "animatedline" jedoch in points. Das ist mein Programmcode bisher:

Code:

function WerkstckplotButtonPushed(app, event)
 x = [app.x,app.x+app.breite,app.x+app.breite,app.x];
 y = [app.y,app.y,app.y+app.laenge,app.y+app.laenge];
 app.plot_array = [app.plot_array; patch(app.UIAxes,x,y,'black')];
 end
 


Code:

function AnimierenButtonPushed(app, event)
app.anim = animatedline(app.UIAxes,'Color','r','LineWidth',1.5);
x = double(app.punkte(:,1));
y = double(app.punkte(:,2));
        for j = 1:size(app.punkte)
            addpoints(app.anim,x(j),y(j));
            drawnow
            pause(0.5)
        end
end
 


Außerdem will ich nicht immer alle Punkte mit Linien verbinden, sondern nur die, die eine senkrechte Linie ergeben und das ganze soll sich insgesamt viel langsamer von einem zum anderen Punkt bewegen. (Ein Bild habe ich euch beigefügt). Ist "animatedline" hier der richtige Ansatz oder würdet ihr was anderes empfehlen?

Liebe Grüße
Tim

Bildschirmfoto 2020-12-08 um 10.22.39.png
 Beschreibung:

Download
 Dateiname:  Bildschirmfoto 2020-12-08 um 10.22.39.png
 Dateigröße:  18.76 KB
 Heruntergeladen:  269 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.12.2020, 10:40     Titel:
  Antworten mit Zitat      
Hallo,

bar hätte den Vorteil, dass du über width die Breite besser kontrollieren kannst. Wenn etwas zu schnell läuft, die Pause vergrößern.
Eine andere Möglichkeit kann sein, rote Patches über die schwarzen Patches zu legen.

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
 
timlie
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 03.12.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.12.2020, 15:06     Titel:
  Antworten mit Zitat      
Hallo Harald,
bezüglich der Geschwindigkeit habe ich die Pause Funktion schon eingebaut. Hier ist das Problem, dass ich nur die Eckpunkte als Punkte in animatedline übergebe und daher die Animation sich ganz schnell von einem Punkt zum nächsten bewegt. Hier probiere ich gerade irgendwie aus den Eckpunkten, die eine Strecke darstellen eine neuen Array zu gewinnen. Z.B siehe in dem angehängten Bild Punkt 1 (-90/-90) und Punkt 2 (-90/10). Aus der Strecke will ich dann einen neuen Array gewinnen mit Punkten, die zwischen Punkt 1 und 2 liegen. Bisher leider erfolglos...

Wenn ich einen weitern Patch-Plot oder beispielsweise die Rectangular Funktion verwende , würden die Proportionen zwischen den beiden Plots stimmen, aber wie animiert man den zweiten Plot? Hierzu müsste ich ja auch wiederum mehrere Punkt als nur die Eckpunkte haben und dann meinen Plot immer wieder aktualisieren. Wenn ich nur so wenige Punkte habe würden da ja einfach nur große Linien nacheinander eingezeichnet werden.

Liebe Grüße
Tim
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

ich kann den Beschreibungen nicht so recht folgen.
Mein Vorschlag ist gerade, animatedline hier nicht zu verwenden und stattdessen bar oder patch.
Hier wie ich mir das mit bar gedacht habe:
Code:
heights = randi([5,10], 1, 10);
hold on
for n = 1:10
    b = bar(n, 1,0.5,'r');
    for k = 2:heights(n)
        b.YData = k;
        xlim([0,11])
        ylim([0,10])
        pause(0.2)    
    end
end
hold off


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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.