У меня проблема с низким качеством тетраэдров в моей сгенерированной сетке.
Я использую CGAL::Delaunay_Triangulation_3
для триангуляции из предварительно определенного облака точек.
Моя проблема в том, что элементы, сгенерированные CGAL, имеют немного низкое качество - наличие полосы и т. Д., Я хотел бы применить некоторую оптимизацию постобработки к сгенерированному Сетка.
Поскольку у меня есть сетка в виде «облака точек», у меня нет Mesh_Domain_3. Все примеры, которые я нашел для оптимизации сетки, использовали make_mesh_3 вместе с Mesh_Domain.
Есть ли способ применить сглаживание к сгенерированной сетке с задержкой с помощью CGAL или настроить CGAL::Delaunay_triangulation_3
для оптимизации? Однако есть одно ограничение - некоторые точки в сетках нельзя перемещать / стирать из облака, а некоторые можно.
Типы, которые я использую:
typedef CGAL::Exact_predicates_inexact_constructions_kernel Kernel;
typedef CGAL::Triangulation_vertex_base_with_info_3<int, Kernel> Vb;
typedef CGAL::Triangulation_data_structure_3<Vb> Tds;
typedef CGAL::Delaunay_triangulation_3<Kernel, Tds> Delaunay;
Код поколения
Delaunay triangulation(nodes.begin(), nodes.end());
//woudld be best to apply mesh smoothing here.
for(auto fit = triangulation.finite_cells_begin(); fit != triangulation.finite_cells_end(); ++fit)
{
auto x1 = fit->vertex(0)->info();
auto x2 = fit->vertex(1)->info();
auto x3 = fit->vertex(2)->info();
auto x4 = fit->vertex(3)->info();
tetras.push_back(new Tetrahedron(nodesToTriangulate[x1],nodesToTriangulate[x2],nodesToTriangulate[x3],nodesToTriangulate[x4]));
}