我有一种算法的分割结果,但是,生成的三角形表面不是流形几何。我在这里问这个问题是否有任何 C++ 库可用于将非流形几何转换为流形曲面?
PS,我已经通过填充孔清理了结果,但是似乎还有一些不光滑的部分和孔。
谢谢
我有一种算法的分割结果,但是,生成的三角形表面不是流形几何。我在这里问这个问题是否有任何 C++ 库可用于将非流形几何转换为流形曲面?
PS,我已经通过填充孔清理了结果,但是似乎还有一些不光滑的部分和孔。
谢谢
如果有任何 C++ 库可用于将非流形几何转换为流形曲面?
是的,有CGAL,即计算几何算法库。
在 CGAL 中,多边形网格被认为具有 2 流形的拓扑。
而当多边形网格的面给定但连通性未知时,这组面称为多边形汤。也就是说,你表面的所有三角形都会被分开处理。
要将非流形表面转换为流形,您可以首先将数据加载到多边形汤中。
然后使用函数将其转换为多边形网格polygon_soup_to_polygon_mesh
。以下来自 CGAL 的代码片段给出了一个示例:
typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef CGAL::Polyhedron_3<K, CGAL::Polyhedron_items_with_id_3> Polyhedron;
std::ifstream input(filename);
std::vector<K::Point_3> points;
std::vector<std::vector<std::size_t> > polygons;
if(!input || !CGAL::read_OFF(input, points, polygons) || points.empty())
{
std::cerr << "Cannot open file " << std::endl;
return EXIT_FAILURE;
}
CGAL::Polygon_mesh_processing::orient_polygon_soup(points, polygons);
Polyhedron mesh;
CGAL::Polygon_mesh_processing::polygon_soup_to_polygon_mesh(points, polygons, mesh);
或者您可以尝试修复此处描述的表面网格。