Я пытаюсь сделать триангуляцию Делоне по множеству точек, найти ближайшую точку к входной точке и получить вершины инцидента, но каким-то образом следующий код не работает.
#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;
}
Например, если data.txt
2 3
1 1
1 0
вывод
3
1 1
incidents:
1 0
2 3
2.02461e-307 6.94896e-308
Почему у меня последняя строка?
2D-триангуляции CGAL имеют бесконечную вершину, связанную со всеми вершинами выпуклой оболочки (см. руководство пользователя для деталей).
Вы можете использовать is_infinite функция для проверки, если симплекс бесконечен.
Других решений пока нет …