How to work with circulating circulators?

I am trying to do a delaunay triangulation of a set of points, find the closest point to the input point and get its vertex of the incident, but somehow the following code does not work.

#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Delaunay_triangulation_2.h>
#include <fstream>
typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef CGAL::Delaunay_triangulation_2<K> Triangulation;
typedef Triangulation::Edge_iterator Edge_iterator;
typedef Triangulation::Point Point;
typedef Triangulation::Vertex_handle Vertex_handle;
typedef Triangulation::Vertex_circulator Vertex_circulator;
int main( )
{
  std::ifstream in("data.txt");
  assert(in);
  std::istream_iterator<Point> begin(in);
  std::istream_iterator<Point> end;
  Triangulation T;
  T.insert(begin, end);
  std::cout << T.number_of_vertices() <<std::endl;
  Vertex_handle handle = T.nearest_vertex(Point(1, 1));
  std::cout << handle->point() << std::endl;
  std::cout<<"incidents: \n" << std::endl;
  Vertex_circulator circulator = T.incident_vertices(handle), done(circulator);
  do
    {
      std::cout << circulator->point() << std::endl;
    } while(++circulator != done);
  return 0;
}

For example, if data.txt

2 3
1 1
1 0

conclusion

3
1 1
incidents:

1 0
2 3
2.02461e-307 6.94896e-308

Why do I have the last line?

+4
source share
1 answer

Two-dimensional CGAL triangulations have an infinite vertex associated with all vertices of the convex hull (see the user manual for details).

You can use the is_infinite function to check if the simplex is infinite.

+5
source

Source: https://habr.com/ru/post/1534636/


All Articles