我在生成的網格中存在低質量四面體的問題。使用CGAL平滑生成Delaunay
我正在使用CGAL::Delaunay_Triangulation_3
從預先定義的點雲進行三角測量。
我的問題是由CGAL生成的元素有點低質量 - 存在條子等,我想對生成的網格應用一些後處理優化。
因爲我有'點雲'形式的Mesh,我沒有Mesh_Domain_3。我在網格優化中找到的所有示例都使用了make_mesh_3和Mesh_Domain。
有沒有什麼辦法可以對CGAL生成的delaunay網格應用平滑,或者自定義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)將其饋送到網格器。 –
@MarcGlisse沒有辦法提高CGAL的質量:CGAL :: Delaunay_triangulation_3?人們必須採取不同的方法?回退到make_mesh_3? –
這是不是很清楚你想要做什麼。我假設你只對空間的某些部分感興趣,比如Delaunay三角剖分中的一些四面體子集。這是爲網格器定義一個域的一種方法。 「改善Delaunay三角測量」並不意味着什麼。對於給定的點集,它是唯一定義的。如果您可以移動點,則需要以某種方式定義域(該代碼爲您定義域的方式提供了很大的靈活性)。 –