Подтвердить что ты не робот

Легкая библиотека треугольников Delaunay (для С++)

Я хотел бы поиграть с некоторыми триангуляциями Delaunay (2D), и я ищу достаточно небольшую библиотеку для работы. Я знаю CGAL, но мне было интересно, есть ли что-то довольно простое и прямолинейное.

Что я хотел бы сделать:

  • создать триангуляцию произвольного множества точек
  • найдите треугольник, в котором находится произвольная точка, и выберите вершины
  • создать изображение триангуляции (необязательно)

Предложения?

4b9b3361

Ответ 1

Вероятно, вам нужно немного детализировать свои цели, чтобы можно было предоставить более релевантные ответы, но позвольте мне сначала упомянуть Triangle, a 2D-инструмент генерации Delaunay, который написан на C и может использоваться как автономная программа, или вызывается из вашего собственного кода.

Затем, о CGAL, вот типичный маленький пример, если вы все еще считаете его:

#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;
}

Ответ 3

Я использовал Gnu Triangulated Surface library для триангуляции 2D Delaunay, и он работал хорошо. Немного странно звонить, потому что он использует этот стиль OOP-in-C GLib, но он легко может быть завершен.