2013-11-08 5 views
4

Я вычисляю триангуляцию 2D delaunay в несколько тысяч точек. Каждая точка имеет больше данных, связанных с ней за пределами координат x и y. Поэтому мне было интересно, можно ли получить индекс каждой точки, чтобы я мог получить доступ к своей собственной точечной структуре в другом векторе.CGAL - Получить индекс вершины после триангуляции Delaunay

В настоящее время, когда я получаю доступ к вершинам из Face_handle, он возвращает точку (то есть координаты x, y). Как вернуть каждую вершину по ее идентификатору (индексу) вместо координат x, y? Спасибо.

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

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

void example() { 

    std::vector<Point> points; 
    points.push_back(Point(1,1)); //index 0 
    points.push_back(Point(1,2)); //index 1 
    points.push_back(Point(1,3)); //index 2 
    points.push_back(Point(2,1)); //index 3 
    points.push_back(Point(2,2)); //index 4 
    points.push_back(Point(2,3)); //index 5 

    Delaunay triangulation; 
    triangulation.insert(points.begin(),points.end()); 

    for(Delaunay::Finite_faces_iterator fit = triangulation.finite_faces_begin(); 
     fit != triangulation.finite_faces_end(); ++fit) { 

    Delaunay::Face_handle face = fit; 
    std::cout << "Triangle:\t" << triangulation.triangle(face) << std::endl; 
    std::cout << "Vertex 0:\t" << triangulation.triangle(face)[0] << std::endl; 
    } 
} 

Выход (х, у координаты):

Triangle: 1 3 1 2 2 2 
Vertex 0: 1 3 
Triangle: 1 2 1 1 2 1 
Vertex 0: 1 2 
Triangle: 1 3 2 2 2 3 
Vertex 0: 1 3 
Triangle: 1 2 2 1 2 2 
Vertex 0: 1 2 

Нужные Выходные (индексы):

Triangle: 2 1 4 
Vertex 0: 2 
Triangle: 1 0 3 
Vertex 0: 1 
Triangle: 2 4 5 
Vertex 0: 2 
Triangle: 1 3 4 
Vertex 0: 1 

ответ

11

Вы можете прикрепить любую информацию вершин триангуляции. Например, чтобы добавить индексы (unsigned int), вы можете сделать следующее:

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

typedef CGAL::Exact_predicates_inexact_constructions_kernel   Kernel; 
typedef CGAL::Triangulation_vertex_base_with_info_2<unsigned int, Kernel> Vb; 
typedef CGAL::Triangulation_data_structure_2<Vb>      Tds; 
typedef CGAL::Delaunay_triangulation_2<Kernel, Tds>     Delaunay; 
typedef Kernel::Point_2            Point; 

int main() { 

    std::vector< std::pair<Point,unsigned> > points; 
    points.push_back(std::make_pair(Point(1,1), 0)); 
    points.push_back(std::make_pair(Point(1,2), 1)); 
    points.push_back(std::make_pair(Point(1,3), 2)); 
    points.push_back(std::make_pair(Point(2,1), 3)); 
    points.push_back(std::make_pair(Point(2,2), 4)); 
    points.push_back(std::make_pair(Point(2,3), 5)); 

    Delaunay triangulation; 
    triangulation.insert(points.begin(),points.end()); 

    for(Delaunay::Finite_faces_iterator fit = triangulation.finite_faces_begin(); 
     fit != triangulation.finite_faces_end(); ++fit) { 

    Delaunay::Face_handle face = fit; 
    std::cout << "Triangle:\t" << triangulation.triangle(face) << std::endl; 
    std::cout << "Vertex 0:\t" << triangulation.triangle(face)[0] << std::endl; 
    std::cout << "Vertex 0:\t" << face->vertex(0)->info() << std::endl; 
    } 
} 
+0

Спасибо, это решит мою проблему. Я не думаю, что можно было бы назначить больше информации каждой вершине? например используя std :: tuple? – socratic

+1

Я никогда не пробовал, но я почти уверен, что вы можете назначить любой тип, который вы хотите ('std :: tuple' или ваш собственный класс и т. Д.). Просто используйте его как параметр шаблона для 'Vb' и при необходимости отредактируйте остальную часть кода. – Sigroad

+3

Позвольте мне подтвердить, что вы можете добавить все, что хотите добавить в вершину. И я хотел бы отметить, что все это описано здесь: http://doc.cgal.org/latest/Triangulation_2/index.html#title40 –

 Смежные вопросы

  • Нет связанных вопросов^_^