Supponiamo che io abbia una mesh 2D costituita da triangoli non sovrapposti e una serie di punti { p i } M i = 1 ⊂ ∪ N k. Qual è il modo migliore per determinare in quale triangolo si trova ciascuno dei punti?
Ad esempio, nella seguente immagine abbiamo , p 2 ∈ T 4 , p 3 ∈ T 2 , quindi vorrei una funzione f che restituisca l'elenco f ( p 1 , p 2 , p 3 ) = [ 2 , .
Matlab ha la funzione pointlocation che fa quello che voglio per le mesh Delaunay, ma fallisce per le mesh generali.
Il mio primo (muto) pensiero è, per tutti i nodi , scorrere tutti i triangoli per scoprire quale triangolo p i è in Tuttavia, questo è è estremamente inefficiente -. Potrebbe essere necessario scorrere ogni triangolo per ogni punto, in modo da potrebbe richiedere O ( N ⋅ M ) lavoro.
Il mio prossimo pensiero è, per tutti i punti , trovare la maglia nodo di via di ricerca più vicino-vicino più prossimo, quindi guardare attraverso triangoli collegati a quel nodo più vicino. In questo caso, il lavoro sarebbe O ( a ⋅ M ⋅ l o g ( N ) ) , dove a è il numero massimo di triangoli collegati a qualsiasi nodo della mesh. Ci sono un paio di problemi risolvibili ma fastidiosi con questo approccio,
- Richiede l'implementazione di un'efficace ricerca del vicino più vicino (o la ricerca di una libreria che lo possiede), che potrebbe essere un'attività non banale.
- Richiede la memorizzazione di un elenco di quali triangoli sono collegati a ciascun nodo, per il quale il mio codice non è attualmente impostato - in questo momento c'è solo un elenco di coordinate del nodo e un elenco di elementi.
Nel complesso sembra inelegante e penso che dovrebbe esserci un modo migliore. Questo deve essere un problema che sorge molto, quindi mi chiedevo se qualcuno potesse raccomandare il modo migliore per avvicinarsi alla ricerca dei triangoli in cui si trovano i nodi, teoricamente o in termini di librerie disponibili.
Grazie!