【问题标题】:CGAL: identify "non-border" edgesCGAL:识别“非边界”边缘
【发布时间】:2022-01-01 01:37:00
【问题描述】:

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

我预计函数 is_border 会识别其他边,但它会为所有边返回 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 的意义上,什么是边框?

  • 难道没有更方便的方法来识别“非边界”边缘(即立方体中的对角线)吗?

【问题讨论】:

    标签: c++ cgal convex-hull


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2023-04-06
      • 2020-05-26
      • 1970-01-01
      • 1970-01-01
      • 2022-09-30
      • 1970-01-01
      • 1970-01-01
      • 2012-11-15
      • 1970-01-01
      相关资源
      最近更新 更多