Вывод индексов точек триангуляции на сфере 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?


Ответы (0 шт):