2015-09-19 7 views
0

У меня проблема с низким качеством 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])); 
} 
+0

Мое предположение, что вам нужно 2 шага: 1) используйте алгоритм реконструкции, чтобы определить домен, и 2) подайте это в mesher. –

+0

@MarcGlisse нет способа улучшить качество: CGAL :: Delaunay_triangulation_3 в CGAL? Нужно придерживаться другого подхода? Вернуться к make_mesh_3? –

+0

Не совсем понятно, что вы хотите сделать. Я предполагаю, что вас интересует только часть пространства, скажем, некоторое подмножество тетраэдров в триангуляции Делоне. Это один из способов определения домена для mesher. «Улучшение триангуляции Делоне» на самом деле ничего не значит. Для данного набора точек оно однозначно определено. И если вы можете перемещать точки, вам нужно определить домен так или иначе (код дает вам большую гибкость в том, как вы определяете домен). –

ответ

0

Я решил использовать сглаженное сглаживание лапласа + дисперсию топологического сглаживания для улучшения качества тетраэдра в сетке. Мне пришлось реализовать эти сглаживания, так как они недоступны в CGAL.

Это значительно улучшило качество сетки. по качеству я имею в виду минимальный телесный угол тетраэдров.

0

Вы можете вычислить центр тяжести для каждого tetrahedon и retriangulate с взвешенной триангуляции.