Вывод индексов точек триангуляции на сфере cgal
Разбираюсь с библиотекой cgal. Мне необходимо вывести индексы вершин, образующих фасету при выполнении триангуляции точек на поверхности сферы. Аналогичный запрос для случая расположения точек на плоскости был дан здесь, однако в данном случае у меня не получается использовать vector<pair<Point_3,unsigned>> с последующим выводом face->vertex(0)->info() (ругается на DToS2 dtos(points.begin(), points.end(), traits)).
Я использую код из 3.2 Using an Exact Kernel мануала 2D Triangulations on the Sphere.
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Delaunay_triangulation_on_sphere_2.h>
#include <CGAL/Projection_on_sphere_traits_3.h>
#include <vector>
#include <algorithm>
template <typename Kernel>
void create_triangulation()
{
typedef typename Kernel::FT FT;
typedef CGAL::Projection_on_sphere_traits_3<Kernel> Traits;
typedef CGAL::Delaunay_triangulation_on_sphere_2<Traits> DToS2;
typedef typename Traits::Point_3 Point_3;
std::cout << "\n-- Constructing triangulation with Kernel: "
<<typeid(Kernel).name() << " --" << std::endl;
std::vector<Point_3> points;
// заполняю координаты точек на сфере
int N = 10;
for (int n = 0; n < N; n++){
auto p = hammersley2d_in_fullsphere(100, vector_point(0.0,0.0,0.0),n, N);
points.emplace_back(Point_3(p._x, p._y, p._z));}
Traits traits(Point_3(0, 0, 0), 100); // centered on (0,0,0), with radius 100
DToS2 dtos(points.begin(), points.end(), traits);
std::cout << dtos.number_of_vertices() << " vertices" << std::endl;
std::cout << dtos.number_of_faces() << " faces\n" << std::endl;
for (auto s = dtos.finite_faces_begin(); s != dtos.finite_faces_end(); s++)
{
//dtos.triangle(s)[0],dtos.triangle(s)[1],dtos.triangle(s)[2] - вектора точек, образующих фасету
std::cout << dtos.triangle(s)[0] << "," << dtos.triangle(s)[1] << "," << dtos.triangle(s)[2] << std::endl;
//a,b,c - индексы вершин
int a = std::distance(points.begin(), std::find(points.begin(), points.end(), dtos.triangle(s)[0]));
int b = std::distance(points.begin(), std::find(points.begin(), points.end(), dtos.triangle(s)[1]));
int c = std::distance(points.begin(), std::find(points.begin(), points.end(), dtos.triangle(s)[2]));
std::cout << a<<", "<<b<<", "<<c<< std::endl;
}
}
int main()
{
std::cout.precision(17);
typedef CGAL::Exact_predicates_inexact_constructions_kernel EPICK;
create_triangulation<EPICK>();
return 0;
}
Подскажите, пожалуйста, как можно вывести индексы вершин без использования std::find?