CGAL: Помощь в получении координат треугольников из триангуляции Делоне - PullRequest
4 голосов
/ 29 октября 2011

Я новичок в CGAL, я уверен, что мой вопрос очень прост.

Я пытаюсь использовать CGAL, чтобы провести триангуляцию Делоне.У меня есть сетка с N трехмерными точками над сферой, и я хочу триангулировать сферу, используя эти точки в качестве вершины треугольников.Мне просто нужно получить список вершин полученных треугольников, например:

id_triangle1 vertex_1 vertex_2 vertex_3 id_triangle2 vertex_1 vertex_2 vertex_3 .......

Я сделал это для выполнениятриангуляция:

    std::vector<Point> P; 
    for(i=0;i<NSPOINTS;i++) 
            P.push_back(Point(GRID[i].x,GRID[i].y,GRID[i].z)); 

    // building Delaunay triangulation. 
    Delaunay dt(P.begin(), P.end()); 

У меня проблема в том, что я понятия не имею, как получить итоговую триангуляцию.Я выяснил, как получить face_iterator, но я не знаю, что оттуда делать:

    Delaunay::Finite_faces_iterator it; 
    for (it = dt.finite_faces_begin(); it != dt.finite_faces_end(); it++){ 
            std::cout << dt.triangle(it) << std::endl; 
    } 

Я не уверен, правильно ли это повторять треугольники, и так ли это... треугольник = лицо ??, я имею в виду, что каждая позиция итератора имеет только треугольник¿?Как я могу правильно получить x, y и z каждого треугольника¿? 101

Ответы [ 2 ]

5 голосов
/ 31 октября 2011

Как задокументировано здесь , Фасетом является пара (Cell_handle, int). Целое число указывает индекс ячейки, противоположной фасету. Таким образом, получить доступ к точкам фасета можно следующим образом: it->first->vertex( (it->second+k)%4 )->point() с k = 1-> 3.

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

0 голосов
/ 06 августа 2014

Если вы воспользуетесь поиском finite_faces_begin () в Google, вы сможете получить множество подсказок CGAL. ​​

Итератор Faces позволит вам получить доступ к базовым данным различными способами.Вот хороший пример того, что называется «tesis» и использует функцию «vertex ()».

http://mati -repa-repo.googlecode.com / svn / trunk / tesis / impl /ХОДЦ /

for( Finite_faces_iterator fi = dt.finite_faces_begin(); fi != dt.finite_faces_end(); fi++){
    Point2 point0 = Point2(fi->vertex(0)->point().hx(), fi->vertex(0)->point().hy());
    Point2 point1 = Point2(fi->vertex(1)->point().hx(), fi->vertex(1)->point().hy());
    Point2 point2 = Point2(fi->vertex(2)->point().hx(), fi->vertex(2)->point().hy());
    ...
}

Удачи.

...