Angenommen , ich habe eine 2D - Gitter , bestehend aus nicht - überlappende Dreiecken , und eine Menge von Punkten { P i } M i = 1 ⊂ ∪ N k = 1 T K . Wie lässt sich am besten bestimmen, in welchem Dreieck jeder der Punkte liegt?
In der folgenden Abbildung haben wir zum Beispiel , p 2 ≤ T 4 , p 3 ≤ T 2 , daher hätte ich gerne eine Funktion f , die die Liste f ( p 1 , p 2 , p 3 ) = zurückgibt [ 2 , 4 , 2 ] .
Matlab hat die Funktion pointlocation, die das tut, was ich für Delaunay-Netze will, aber es schlägt für allgemeine Netze fehl.
Mein erster (dummer) Gedanke ist, für alle Knoten alle Dreiecke zu durchlaufen, um herauszufinden, in welchem Dreieck p i sich befindet. Dies ist jedoch äußerst ineffizient - Sie müssen möglicherweise jedes Dreieck für jeden Punkt durchlaufen, also es könnte O ( N ⋅ M ) Arbeit erfordern .
- Es erfordert die Implementierung einer effizienten Suche nach dem nächsten Nachbarn (oder die Suche nach einer Bibliothek, in der diese vorhanden ist), was eine nicht triviale Aufgabe sein kann.
- Dazu muss eine Liste mit den an jeden Knoten angehängten Dreiecken gespeichert werden, für die mein Code derzeit nicht eingerichtet ist. Derzeit gibt es nur eine Liste mit Knotenkoordinaten und eine Liste mit Elementen.
Insgesamt scheint es unelegant, und ich denke, es sollte einen besseren Weg geben. Dies muss ein Problem sein, das häufig auftritt. Daher habe ich mich gefragt, ob jemand den besten Weg empfehlen kann, um herauszufinden, in welchen Dreiecken sich die Knoten befinden, entweder theoretisch oder in Bezug auf die verfügbaren Bibliotheken.
Vielen Dank!