У меня есть некоторая 2D ограниченная триангуляция. При добавлении ограничения возникает ошибка. Это мой простой пример его использования:
#include "stdafx.h"
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Constrained_Delaunay_triangulation_2.h>
#include <CGAL/Constrained_triangulation_plus_2.h>
#include <vector>
#include <fstream>
typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef CGAL::Triangulation_vertex_base_2<K> Vb;
typedef CGAL::Constrained_triangulation_face_base_2<K> Fb;
typedef CGAL::Triangulation_data_structure_2<Vb,Fb> TDS;
typedef CGAL::Exact_predicates_tag Itag;
typedef CGAL::Constrained_Delaunay_triangulation_2<K, TDS, Itag> CDT;
typedef CGAL::Constrained_triangulation_plus_2<CDT> CDTPlus;
typedef CDT::Constraint Constraint;
typedef std::vector<Constraint> Constraints;
void load_data(const char* filename, Constraints &c)
{
std::fstream stream(filename, std::ios::in | std::ios::binary);
stream.seekp(0, std::fstream::end);
std::streamoff size = stream.tellp() / sizeof(Constraint);
stream.seekp(0, std::fstream::beg);
c.resize((size_t)size);
stream.read(reinterpret_cast<char *>(&c.front()), sizeof(Constraint) * size);
}
int _tmain(int argc, _TCHAR* argv[])
{
Constraints c;
load_data("e:\\data.bin", c);
CDTPlus cdt;
// when i == 53376 - error
for (size_t i = 0; i < c.size(); ++i)
cdt.insert_constraint(c[i].first, c[i].second);
return 0;
}
Это мой файл data.bin data.bin
Это мой проект ссылка на сайт
Шаблон класса CGAL::Constrained_Delaunay_triangulation_2
имеет три параметра шаблона. Аргумент по умолчанию для третьего, ITag
, является CGAL::No_intersection_tag
, Это означает, что пересечения ограничений не обрабатываются.
Вероятно, ваши входные ограничения пересекаются.
Других решений пока нет …