Я пытаюсь использовать CGAL, чтобы сделать некоторую Триангуляцию Делоне. Я использовал один из образцов CGAL для вычислений триангуляции, которая включает полевой атрибут высоты.
Проблема у меня есть наличие, состоит в том, что я понятия не имею, как получить получающуюся триангуляцию. Я выяснил, как получить face_iterator, но я не знаю, что сделать оттуда. То, что я надеюсь получить, является индексом в массив точки для каждой из 3 точек на каждом треугольнике.
Я испытываю затруднения при прохождении через все вложенные шаблоны:
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Triangulation_euclidean_traits_xy_3.h>
#include <CGAL/Delaunay_triangulation_2.h>
typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef CGAL::Triangulation_euclidean_traits_xy_3<K> Gt;
typedef CGAL::Delaunay_triangulation_2<Gt> Delaunay;
typedef K::Point_3 Point;
int main()
{
//initialize the points with some trivial data
std::vector<Point> pts;
pts.push_back(Point(1., 2., 3.));
pts.push_back(Point(2., 2., 3.));
pts.push_back(Point(1., 3., 3.));
pts.push_back(Point(4., 2., 3.));
//create a delaunay triangulation
Delaunay dt;
dt.insert(pts.begin(), pts.end());
//iterate through the faces
Delaunay::Finite_faces_iterator it;
for (it = dt.finite_faces_begin(); it != dt.finite_faces_end(); it++)
{
//What do I do here??
}
return 0;
}
, Если вы хотите действительно расширенный пример того, как сделать точно, что вы хотите, смотрите на источник к инструментам пейзажа X-плоскости отсюда: http://scenery.x-plane.com/code.php
расширенным примером, я имею в виду несколько сотен тысяч строк, но существует использование почти всего, что CGAL может сделать с Триангуляциями Делоне и расширенными атрибутами там.
Вот пример из Google. Введен Finite_faces_iterator.
Interval_skip_list isl;
for(Finite_faces_iterator fh = dt.finite_faces_begin();
fh != dt.finite_faces_end();
++fh){
isl.insert(Interval(fh));
}
std::list<Interval> level;
isl.find_intervals(50, std::back_inserter(level));
for(std::list<Interval>::iterator it = level.begin();
it != level.end();
++it){
std::cout << dt.triangle(it->face_handle()) << std::endl;
}
Это не делает то, что вы хотите, но дает пример того, что можно сделать с итератором.