Я пытаюсь триангулировать грани многогранника, используя CGAL 4.13 и следующий фрагмент кода, который принимает файл определения многогранника в формате OFF на стандартном вводе:
#include <CGAL/Polyhedron_3.h>
#include <CGAL/IO/Polyhedron_iostream.h>
#include <CGAL/Exact_predicates_exact_constructions_kernel.h>
#include <CGAL/Polygon_mesh_processing/triangulate_faces.h>
typedef CGAL::Exact_predicates_exact_constructions_kernel Kernel;
typedef CGAL::Polyhedron_3<Kernel> Polyhedron;
using namespace std;
int main (void) {
Polyhedron p;
cin >> p;
if (!CGAL::Polygon_mesh_processing::triangulate_faces(p))
cerr << p << endl << "Triangulation failed!" << endl;
}
Однако я замечаю следующее предупреждение:
CGAL предупреждение: проверьте нарушение! Выражение: false Файл:
/usr/include/CGAL/Constrained_triangulation_2.h Строка: 902
Объяснение: Вы используете точный тип числа, используя
Класс Constrained_triangulation_plus_2 позволит избежать каскадирования
Вычисление пересечения и быть гораздо более эффективным Это сообщение
отображается только если CGAL_NO_CDT_2_WARNING не определено.
См. Инструкции по сообщению об ошибках на
https://www.cgal.org/bug_report.html
и триангуляция не удалась. Напечатано сообщение Triangulation failed!
, а также определение многогранника, которое четко показывает некоторые грани с 5 или даже 7 вершинами.
К сожалению, представление OFF многогранника имеет длину 8070 строк, и мне не удалось создать меньший пример для воспроизведения проблемы. Поэтому я загрузил его здесь . Он доступен только в течение 30 дней, и если кто-то может предложить лучшее место для его загрузки, я рассмотрю это.
После компиляции, например, с
g ++ -O3 tri.cpp -o tri -lCGAL -lgmp -lmpfr -Wall
проблема может быть воспроизведена с помощью
. / Tri
Я не уверен, связан ли провал триангуляции с предупреждением; как я могу использовать класс Constrained_triangulation_plus_2
с CGAL::Polygon_mesh_processing::triangulate_faces()
? Это вообще возможно? Триангуляция лица не сложная вещь, как это может вообще не сработать?