У меня проблема с низким качеством Tetrahedrons в моей сгенерированной сетке.Сглаживание сгенерированного Delaunay с использованием CGAL
Я использую CGAL::Delaunay_Triangulation_3
для триангуляции, из предопределенного облака точек.
Моя проблема в том, что элементы, созданные CGAL, немного низкое качество - наличие sliver и т. Д., Я бы хотел применить некоторую пост-обработку для сгенерированной Mesh.
Поскольку у меня есть Mesh в форме «облака точек», у меня нет Mesh_Domain_3. Все примеры, которые я нашел для оптимизации сетки, использовали make_mesh_3 вместе с Mesh_Domain.
Есть ли способ применить сглаживание на сгенерированной сетке delaunay с использованием 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]));
}
Мое предположение, что вам нужно 2 шага: 1) используйте алгоритм реконструкции, чтобы определить домен, и 2) подайте это в mesher. –
@MarcGlisse нет способа улучшить качество: CGAL :: Delaunay_triangulation_3 в CGAL? Нужно придерживаться другого подхода? Вернуться к make_mesh_3? –
Не совсем понятно, что вы хотите сделать. Я предполагаю, что вас интересует только часть пространства, скажем, некоторое подмножество тетраэдров в триангуляции Делоне. Это один из способов определения домена для mesher. «Улучшение триангуляции Делоне» на самом деле ничего не значит. Для данного набора точек оно однозначно определено. И если вы можете перемещать точки, вам нужно определить домен так или иначе (код дает вам большую гибкость в том, как вы определяете домен). –