2009-09-18 2 views
19

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

Вещи, которые я хотел бы сделать:

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

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

+0

В какой размер? – Camille

+0

Вам нужно, чтобы это была библиотека, или может быть автономная программа в порядке? – Camille

+0

Автономная программа, вероятно, не будет нормально. Я хочу интегрировать это в более крупный программный инструмент. –

ответ

11

Возможно, вам необходимо подробно рассказать о своих целях, чтобы можно было предоставить более релевантные ответы, но позвольте мне сначала упомянуть, инструмент генерации 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; 
} 
+1

Спасибо, что указали мне на Треугольник. Это очень простой и простой в использовании. –

+0

Может ли любой из этих подходов использоваться в родном iPad-приложении? – Andre

+0

@ AndrewProck вы использовали его как lib? потому что я не нахожу какой-либо пример кода, используя этот треугольник lib – jokoon

0

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

3

Смотрите также poly2tri, это выглядит красиво: https://github.com/greenm01/poly2tri

+0

Это для ограниченного delaunay, я не уверен, что это сработает, если вы используете случайный набор точек. – jokoon