Verfasst am: 18.11.2013, 14:02
Titel: tsearch durch pointLocation ersetzen
Hallo zusammen!
Seit Matlab 2013 funktioniert die Funktion tsearch nicht mehr. Daher bin ich gezwungen einen alten Code mit der neuen Funktion pointLocation zu ersetzen. Leider hat sich dabei irgendwo der Fehlerteufel eingeschlichen und meine Ergebnisse sehen furchtbar aus.
Vielleicht hat ja hier jmd. einen Tipp für mich...
Im Code geht es darum, aus einer durch diverse Punkte aufgespannten Ebene diejenigen Punkte zu finden, die ein Dreieck bilden, welches einen gesuchten Punkt umschließt.
Mein ursprünglicher Code sieht so aus und funktioniert wunderbar:
Code:
% Netz aus Dreiecken bilden, Punkte liegen als Matrix mit X und Y Koordinaten vor.
TRI=delaunay(Punkte(:,1), Punkte(:,2);
% Zeile aus TRI finden, die das gesuchte Dreieck enthält
T=tsearch(Punkte(:,1), Punkte(:,2), TRI, gesuchterPunkt_X, gesuchterPunkt_Y);
% Zeile aus TRI, die Position der Punkte in den Ebenenpunkten angibt.
T_TRI=TRI(T,:);
% Dreieck als Matrix
gesuchtesDreieck=Punkte(T_TRI,:);
In meiner Fehlersuche bin ich zumindest ein wenig fortgeschritten.
Der Unterschied der Ergebnisse ergibt sich durch unterschiedliche Dreiecksnetze. Die Funktion delaunay liefert ein anderes Netz als DelaunayTri.
Gibt es zu DelaunayTri und pointLocation andere alternative Funktionen, die mir ein Dreiecksnetz erzeugen und mir daraus anschließend das umgebende Dreieck eines innerhalb des Netzes gesuchten Punktes liefern?
Ich verzweifle gerade ein wenig...
Jetzt steht in der Dokumentation zu DelaunayTri allerdings schon "DelaunayTri will be removed in a future release".
Falls es irgendwann mal jemand mit dem selben Problem konfrontiert sein sollte, ich habe inzwischen eine Lösung gefunden.
Diese sieht wie folgt aus:
Code:
% Dreiecksnetz erzeugen
DT=delaunayTriangulation(Punkte(:,1), Punkte(:,2));
% gesuchtes Dreieck ermitteln
PL=pointLocation(DT, [gesuchterPunkt_X, gesuchterPunkt_Y]);
% Enthaltene Positionen ermitteln
CL=DT.ConnectivityList(PL,:);
% Punkte auslesen
PT=DT.Points(CL,:);
% Um dann neben den Koordinaten die zusätzlichen Informationen der ursprünglichen Punkte zu erhalten... for k=1:3
gesuchtesDreieck(k,:)=Punkte(Punkte(:,2)==PT(k,1) & Punkte(:,3)==PT(k,2), :);
end
Die ursprüngliche Funktion tsearch fand ich allerdings viel besser. Schade, dass diese nicht mehr funktioniert.
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.