2011-09-05 20 views
33

Sto cercando un'implementazione .NET che costruisca la triangolazione di Delaunay da un insieme di punti.Triangolazione efficiente di Delaunay

Ho già testato un paio di implementazioni ma tutte hanno funzionato solo per una piccola quantità di punti (fino a 20.000).

Ho bisogno di qualcosa che possa gestire 500.000 punti in tempi ragionevoli.

+0

è strano è in grado di gestire solo 20000 punti; ha solo O (n * log (n)) tempo di esecuzione – Simone

+7

Hai provato l'implementazione C# a http://www.s-hull.org/? L'algoritmo che usa dovrebbe essere veloce. – CodesInChaos

+0

Ho usato il s-hull.org algo. Le prestazioni si riducono in modo significativo una volta arrivati ​​a 100.000 o più punti, a causa del numero fenomenale di ricorsioni in corso nel codice. Non sai come batterlo. Ho sentito che c'era un altro algo là fuori che riduce la ricorsività del codice, non è sicuro di come è stato chiamato (potrebbe essere stato De Wall o qualcosa del genere). – code4life

risposta

1

Hai provato NetTopologySuite

+0

Questo è un wrapper per JTS - che a quanto pare non supporta 3D - http://tsusiatsoftware.net/jts/jts-faq/jts-faq.html – JumpingJezza

11

che stavo cercando la stessa cosa e ho trovato una libreria C# 4.0 chiamato MIConvexHull:

"Un algoritmo di scafo convesso e libreria per 2D, 3D e dimensioni superiori.Il codice può anche essere utilizzato per calcolare triangolazioni di Delaunay e mesh Voronoi dei dati di input.I benchmark indicano che il codice dello scafo convesso e 4 e dimensioni superiori il codice di triangolazione è uguale o migliore della soluzione fornita dalla libreria CAL CG ++. "

http://miconvexhull.codeplex.com/

Aggiornamento Set/2016:

Questa libreria è trasferito a Github e sembra che ora è rilasciato sotto la licenza MIT (alcuni degli esempi sono GPL). È possibile trovare l'ultima versione qui:

https://github.com/DesignEngrLab/MIConvexHull

La documentazione è in realtà nel codice sorgente ed è semplice da usare. Ecco il file di origine rilevanti per la triangolazione di Delaunay:

https://github.com/DesignEngrLab/MIConvexHull/blob/master/MIConvexHull/Triangulation.cs

Se volete vedere la versione originale a partire dal 2012. Date un'occhiata qui:

http://miconvexhull.codeplex.com/SourceControl/changeset/view/e1b26677eb1a#MIConvexHull/Triangulation/Triangulation.cs

+0

Ancora fa il trucco. Imposta un diagramma di 500K punti in pochi secondi. – OzrenTkalcecKrznaric

+0

Nessun download, nessun documento. La pagina di download dice con orgoglio che non è possibile eseguirne il downlod, e si richiede invece di interpretare il formato del progetto proprietario, indovinare la propria strada fino a trovare alcuni esempi di origine e decodificare le istruzioni. Ed è GPLv3, che esclude molti usi. Non una grande biblioteca! – Adam

+0

Se date un'occhiata al repository Github, troverete che il codice sorgente è documentato ed è concesso in licenza con il MIT. – Pablo

1

C'è una soluzione chiamata G# .

Ha triangolazioni di Delaunay (anche con linee di interruzione). Dal grafico delle prestazioni sul loro sito web dovresti essere in grado di triangolare 500k punti in circa 30 secondi.

+0

cattivo quadro e non libero –

15

Se si desidera costruire la triangolazione 2D Delaunay, utilizzare Triangle.Net. Si tratta di una porta C# diretta del famoso programma Triangle di Shewchuk.

+0

sei fantastico :). Stavo cercando lo stesso identico: D – Flamy

+2

Sembra che Triangle.Net sia concesso in licenza con la licenza MIT, ma a quanto pare si tratta di una porta lineare da Triangolo a C#, e Triangolo non è stato concesso sotto licenza MIT. Dubito che sia legalità. –

+0

Ho finito per utilizzare me stesso Triangle.NET. Usandolo per Unity 5, dovevo solo aggiustare due piccole cose per ottenere il .Net 4.5 per lavorare con l'unità. –

Problemi correlati