CGAL:识别 "non-border" 条边

CGAL: identify "non-border" edges

我发现了 CGAL,我尝试了 3D 凸包。我用立方体的顶点进行了尝试,我观察到凸包是三角剖分(我使用的是 Surface_mesh,而不是 Polyhedron_3)。所以 CGAL 在边列表中包括立方体面的对角线。我想识别这样的边缘(因为,例如,我不想绘制这些边缘)。

我预计函数 is_border 会识别其他边,但它 returns false 用于所有边。那么什么是边框?

我找到了解决办法。我遍历边缘,对于每对相应的半边,我采用附加面:

Mesh::Halfedge_index h0 = mesh.halfedge(ed, 0);
Mesh::Face_index face0 = mesh.face(h0);
Mesh::Halfedge_index h1 = mesh.halfedge(ed, 1);
Mesh::Face_index face1 = mesh.face(h1);

然后我计算这两个面的法线,如果这两个法线相等,我就声称这条边是对角线。这是正确的吗?这似乎有效。

但我的问题是:

边界边是仅入射到一个面的边,这意味着您有一个非封闭的输出。显然,对于 3D 凸包,这不会发生,除非您处于退化情况并且点集不是 3D。即使我们应该直接从算法中获取此信息,您也可以使用几何谓词(CGAL::coplanar() 与边的点和入射面的相对顶点)。我将打开一个问题以直接获取此信息。