Domanda

Mi piacerebbe giocare con alcune triangolazioni (2D) di Delaunay e sto cercando una biblioteca ragionevolmente piccola con cui lavorare. Sono a conoscenza di CGAL, ma mi chiedevo se ci fosse qualcosa di abbastanza semplice e chiaro là fuori.

Cose che vorrei fare:

  • crea una triangolazione di un insieme arbitrario di punti
  • trova il triangolo in cui si trova un punto arbitrario e recupera i vertici
  • crea un'immagine della triangolazione (opzionale)

Suggerimenti?

È stato utile?

Soluzione

Probabilmente dovresti dettagliare un po 'i tuoi obiettivi, in modo che possano essere fornite risposte più pertinenti, ma vorrei prima menzionare Triangle , uno strumento di generazione 2D di Delaunay, che è scritto in C e può essere utilizzato sia come programma autonomo, sia chiamato dal proprio codice.

Quindi, riguardo a CGAL, ecco un piccolo esempio tipico, nel caso in cui lo consideri ancora:

#include <vector>
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Delaunay_triangulation_2.h>

typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef CGAL::Delaunay_triangulation_2<K>                   Delaunay;    
typedef K::Point_2                                          Point;

void load_points(std::vector< Point >& points)
{
  points.push_back(Point(1., 1.));
  points.push_back(Point(2., 1.));
  points.push_back(Point(2., 2.));
  points.push_back(Point(1., 2.));      
}

int main()
{
  std::vector< Point > points;
  load_points(points);
  Delaunay dt;
  dt.insert(points.begin(), points.end());
  std::cout << dt.number_of_vertices() << std::endl;
  return 0;
}

Altri suggerimenti

Vedi anche poly2tri, sembra carino: https://github.com/greenm01/poly2tri

Ho usato la libreria Gnu Triangulated Surface per la triangolazione 2D Delaunay e ha funzionato bene. Leggermente strano da chiamare perché utilizza quello stile OOP-in-C GLib, ma può essere facilmente impacchettato .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top