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);
然后我计算这两个面的法线,如果这两个法线相等,我就声称这条边是对角线。这是正确的吗?这似乎有效。
但我的问题是:
什么是边框,is_border
?
难道没有更方便的方法来识别“非边界”边缘(即立方体的对角线)吗?
边界边是仅入射到一个面的边,这意味着您有一个非封闭的输出。显然,对于 3D 凸包,这不会发生,除非您处于退化情况并且点集不是 3D。即使我们应该直接从算法中获取此信息,您也可以使用几何谓词(CGAL::coplanar()
与边的点和入射面的相对顶点)。我将打开一个问题以直接获取此信息。
我发现了 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);
然后我计算这两个面的法线,如果这两个法线相等,我就声称这条边是对角线。这是正确的吗?这似乎有效。
但我的问题是:
什么是边框,
is_border
?难道没有更方便的方法来识别“非边界”边缘(即立方体的对角线)吗?
边界边是仅入射到一个面的边,这意味着您有一个非封闭的输出。显然,对于 3D 凸包,这不会发生,除非您处于退化情况并且点集不是 3D。即使我们应该直接从算法中获取此信息,您也可以使用几何谓词(CGAL::coplanar()
与边的点和入射面的相对顶点)。我将打开一个问题以直接获取此信息。