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

In Surf Plot Gitterabschnitt anklicken und auslesen

 

laze
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 69
Anmeldedatum: 12.10.11
Wohnort: Stuttgart
Version: R2013a
     Beitrag Verfasst am: 19.10.2012, 20:41     Titel: In Surf Plot Gitterabschnitt anklicken und auslesen
  Antworten mit Zitat      
Hallo zusammen,

ich stehe vor folgendem Problem, dass ich in einem Surf Plot in einen Abschnitt klicken und über die ButtonDownFcn mir den angeklickten Wert in einer Variablen ausgeben lassen will.

Nur leider weiss ich nicht, ob das in dieser Form überhaupt möglich ist.

Hat jemand eine Idee?
Ursprünglich wollte ich nach folgedem Video vorgehen nur leider funktioniert das nicht so ganz.

http://blogs.mathworks.com/pick/200.....ding-callbacks-to-a-plot/


Gruß laze
_________________

--Wannabe
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 19.10.2012, 23:47     Titel: Re: In Surf Plot Gitterabschnitt anklicken und auslesen
  Antworten mit Zitat      
Hallo laze,

Bitte erkläre bei Ausdrücken wie "funktioniert nicht so ganz" immer alle notwendigen Details. Was hast Du genau gemacht und welche Probleme traten auf?

Die Aufgabe ist nicht trivial, da eine 3D-Surface ja in den 2D-Bildschirm projiziert wird. Deshalb kann der Cursor ja beim Klicken mehrere hintereinanderliegende Punkt meinen. Wahrscheinlich ist natürlich der vorderste Punkt gemeint.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
laze
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 69
Anmeldedatum: 12.10.11
Wohnort: Stuttgart
Version: R2013a
     Beitrag Verfasst am: 20.10.2012, 12:10     Titel:
  Antworten mit Zitat      
Danke für die schnelle Antwort Smile
Dann werde ich mal konkreter

Wie bereits gesagt habe ich mich an dem Video orientiert.
Problematisch hierbei war das "einzeln" Plotten der Z-Daten. Man kann mit "surf" bekanntlich ja keine Scalare plotten. Zumindest sagt das die Fehlermeldung gleich beim ersten Ausführen der for Schleife.
D.h. ich kann nicht auf diese Weise herausfinden welchen Wert ich in dem Kennfeld angeklickt habe.

Code:
j=1;
 while j<=length(handles.x_stuetzstellen_kennfeld)
   for i=1:numel(handles.y_stuetzstellen_kennfeld)
   hsurf=surf(handles.x_stuetzstellen_kennfeld, handles.y_stuetzstellen_kennfeld,handles.z_daten_interpoliert_kennfeld,...
             'userdata',[j,i],'ButtonDownFcn',@test);
       i=i+1;
       if i>length(handles.y_stuetzstellen_kennfeld)
        j=j+1;
        i=1;
       else
       end
   end
 end


Tjo, soweit so gut.

Die ButtonDownFcn funktioniert auch soweit. Nur leider wird mir immer für [i,j] die höchsten Indices ausgegeben. Also immer den Dimensionen des Kennfelds entsprechend.

Nur möchte ich gerne, wenn ich eine 14x14 Matrix habe, beispielsweise den Wert bei [8,4] haben.

Danke

Gruß laze
_________________

--Wannabe
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 20.10.2012, 14:09     Titel:
  Antworten mit Zitat      
Hallo laze,

Ich habe das Video nicht gesehen. Falls das nötig ist, um die Frage zu verstehen, schlage ich vor die Frage neu zu formulieren, so dass man auch ohne Lektüre weiterer Filme eine Antwort finden kann,.

Zitat:
Die ButtonDownFcn funktioniert auch soweit. Nur leider wird mir immer für [i,j] die höchsten Indices ausgegeben.

Das verstehe ich nicht. Was ist "die ButtonDownFcn"? Funktioniert der gepostete Code nun oder nicht? Der Code durchläuft alle Elemente und gibt natürlich die Indices des letzen zurück. Weshalb sollte er ausgerechnet "den Wert bei [8,4]" antworten?

Ich verstehe also immer noch nicht, was Du genau möchtest, was Du bisher machst und welcher Fehler auftritt. Ich glaube sicher, dass Dir das Problem dagegen vollkommen klar ist und dass für Dich die bisherige Frage natürlich Hand und Fuß hat. Aber ohne diesen Kontext sind Aussagen wie diese rätselhaft: "Man kann mit "surf" bekanntlich ja keine Scalare plotten."

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
laze
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 69
Anmeldedatum: 12.10.11
Wohnort: Stuttgart
Version: R2013a
     Beitrag Verfasst am: 21.10.2012, 18:53     Titel:
  Antworten mit Zitat      
Ok ^^

Dann probier ich es einmal anders.
Folgendes Bild im Anhang zeigt ein von mir geplottetes surf-Kennfeld.
Über meine Routine wollte ich bei Klicken auf einen beliebigen Punkt in meinem Plot herausfinden, um welchen Wert es sich dabei handelt. Ich möchte also wissen welcher z-Wert aus
Code:
handles.z_daten_interpoliert_kennfeld

angeklickt wurde bzw. welcher dort in unmittelbarer Nähe liegt.

Wenn ich nun in dieses Kennfeld klicke, soll mein Programm das ja irgendwie registrieren. Deswegen die ButtonDownFcn.
Code:
hsurf=surf(handles.x_stuetzstellen_kennfeld, handles.y_stuetzstellen_kennfeld,handles.z_daten_interpoliert_kennfeld,...
              'ButtonDownFcn',@meineFunktion);

Dadurch soll eine Funktion aufgerufen werden, in der ich eben herausfinden kann, um was für einen Datenpunkt es sich handelt.
Code:
   function meineFunktion(gcbo,EventData,handles)
    %Finde heraus, welcher Wert angeklickt wurde.
    end

Tja und da bin ich dann am Ende mit meinem Latein, weil ich nicht weiss, wie ich das bewerkstelligen könnte.

Ich hoffe, dass diesmal deutlicher zum Vorschein kommt, was mein Problem ist. Smile Vielleicht hat ja jemand eine Idee.

Gruß laze

Kennfeld.jpg
 Beschreibung:

Download
 Dateiname:  Kennfeld.jpg
 Dateigröße:  70.51 KB
 Heruntergeladen:  528 mal

_________________

--Wannabe
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 21.10.2012, 22:36     Titel:
  Antworten mit Zitat      
Hallo laze,

Ich kenne keine fertige Lösung dafür.
Das SURF-Objekt enthält Vierecke, die nicht planar sein müssen.
Beim Klick auf das SURF-Objekt (ButtonDownFcn) wird der CurrentPoint des AXES-Objects gesetzt als [2 x 3] Matrix. Dies enthält die Sichtlinie durch den angeklickten Punkt.
Also kannst Du zunächst die Koordinaten des SURF-Objektes verwenden, um eine Triangulisierung zu erhalten, also die Fläche in Dreiecke zu zerlegen. Dann muss beim Klich nur noch getestet werden, welches Dreieck von der Sichtlinie durchstoßen wird.

Nun hört sich das aber wirklich nach einem Standardproblem an. Dafür findet man doch eigentlich immer etwas in im FileExchange. Ich find aber nur z.B. http://www.mathworks.com/matlabcent.....-triangleray-intersection, http://www.mathworks.com/matlabcent.....-raytriangle-intersection. Bei der Triangularisierung könnte www.mathworks.com/matlabcentral/fil.....rf2stl/content/surf2stl.m behilflich sein.

Vielleicht kennt jemand anderes aber eine bereits implementierte Lösung...

Gruß, Jan
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 - 2025 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.