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

Unmittelbare Ausgabe im Plot

 

jochma
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 79
Anmeldedatum: 25.10.07
Wohnort: Oberbayern
Version: Version 7.0.0 (R14)
     Beitrag Verfasst am: 14.02.2008, 16:25     Titel: Unmittelbare Ausgabe im Plot
  Antworten mit Zitat      
Servus,

meine Frage:
wie kann ich unmittelbar bzw. simultan zu einer Berechnung/Userinteraktion bereits beendete Ergebnisse/Editierungen in einem Plot ausgeben?

In meiner Implementierung soll beispielsweise der Anwender mit dem Befehl ginput aneinanderhängende lineare Züge beliebiger Länge im Plot definieren, bis er seine Auswahl mit der Entertaste beendet.
Nach Abschluss wird dieser Polygonzug im Plot gezeichnet:

Code:

[a, b]=ginput;
p=line(a,b);
 


Nun soll aber der Polygonzug nicht erst nach Ende der gesamten Userinteraktion sondern jede einzelne Gerade unmittelbar nach ihrer Definition gezeichnet werden, so dass der User sofort nachvollziehen kann, welchen Polygonzug er bereits gewählt hat.

Mein Gedanke war, den Polygonzug aufzuteilen und den Plot innerhalb einer for-Schleife ablaufen zu lassen, à la:

Code:

[a, b]=ginput;
k=length(a)-1;

o=1;
for i=1:k;
    hold on
    ai=[a(i), a(i+1)];
    bi=[b(i), b(i+1)];
    p(o)=line(ai,bi);
    o=o+1;
end
 


Um das gewünschte Ergebnis zu erreichen, müsste jedoch nun auch der ginput-Befehl in diese Schleife irgendwie miteingepackt werden und dementsprechend dynamisch ablaufen.

Kann man dies dementsprechend so implementieren oder gibt es bzw. kann man Befehle wie drawnow benutzen, um unmittelbar den Plot ausgeben zu lassen, oder pause, um die ginput-Funktion mit der nächsten Gerade warten zu lassen, bis die vorherige gezeichnet ist?

Besten Dank,

gruß
jochma
Private Nachricht senden Benutzer-Profile anzeigen


outsider
Forum-Meister

Forum-Meister


Beiträge: 806
Anmeldedatum: 03.09.07
Wohnort: München
Version: R2012b
     Beitrag Verfasst am: 14.02.2008, 16:49     Titel:
  Antworten mit Zitat      
das sollte helfen:
Code:
figure
axes
h_line = line(NaN,NaN)
[x,y]=ginput(1);
% Anzahl der lines
n = 5
while n
   [x(end+1),y(end+1)]=ginput(1);
   set(h_line,'XData',x,'YData',y)
   n = n-1;
end



MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
jochma
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 79
Anmeldedatum: 25.10.07
Wohnort: Oberbayern
Version: Version 7.0.0 (R14)
     Beitrag Verfasst am: 14.02.2008, 17:26     Titel:
  Antworten mit Zitat      
Merci, vielen Dank für die Hilfe, das klappt schon mal!

Eine Frage wär noch, ob es auch möglich ist die Anzahl der lines n, die hier auf 5 gesetzt ist, variabel zu gestalten, d.h. dass der Benutzer beliebig viele (oder wenige) aneinanderhängende lines definieren kann, bis er eine bestimmte (Return-, Maus- oder etc.-Taste) drückt und so seine Aktion abschließt?

gruß
jochma
Private Nachricht senden Benutzer-Profile anzeigen
 
jochma
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 79
Anmeldedatum: 25.10.07
Wohnort: Oberbayern
Version: Version 7.0.0 (R14)
     Beitrag Verfasst am: 15.02.2008, 16:24     Titel:
  Antworten mit Zitat      
So, hab's gelöst!

Über das Beispiel zur ginput-Fkt. bin ich draufgekommen.

Etwas umständlicher als zuvor, aber klappt:

Code:

ab = []; n = 0;
mou = 1; i=1;
while mou == 1
    [ai,bi,mou] = ginput(1);
    % Plot der ausgewählten Polygonpunkte
    plot(ai,bi,'ro')
    n = n+1;
    ab(:,n) = [ai;bi];
    [u,k]=size(ab);
    if k >=2
        for i=2:k
            abs=[ab(1,i-1), ab(1,i); ab(2,i-1), ab(2,i)];
            % Plot des jeweils aktuellen Straßenzugs
            plot(abs(1,:), abs(2,:), 'r');
        end
    end
end

% Plot des endgültigen Polygonzugs
p2=plot(ab(1,:),ab(2,:)); set(p2,'Color','r'); set(p2,'LineWidth',2);

a=ab(1,:); b=ab(2,:);
 


gruß,
jochma
Private Nachricht senden Benutzer-Profile anzeigen
 
outsider
Forum-Meister

Forum-Meister


Beiträge: 806
Anmeldedatum: 03.09.07
Wohnort: München
Version: R2012b
     Beitrag Verfasst am: 15.02.2008, 16:55     Titel:
  Antworten mit Zitat      
wie wärs mit der Funktion ROIPOLY?
(ist allerdings aus der Image Processing TB)


MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
jochma
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 79
Anmeldedatum: 25.10.07
Wohnort: Oberbayern
Version: Version 7.0.0 (R14)
     Beitrag Verfasst am: 15.02.2008, 23:28     Titel:
  Antworten mit Zitat      
die image processing toolbox hab' ich leider nicht, wär aber wohl nicht verkehrt.
gruß
jochma
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.