CGAL:在有限面上迭代时识别凸包面

CGAL: Identify convex hull facets when iterating over finite facets

我想知道是否有任何方法可以在迭代 Delaunay 3D 三角剖分的有限面时识别凸包中的面

在CGAL中,凸包上的面都入射到无限顶点。所以你只需要查看与小平面相对的两个顶点,并检查其中一个是否是无限顶点。

这里是一些示例代码,用于从所有有限面上识别凸包上的面。每个面都是一个单元格-顶点对,mirror_facet 函数提供另一个标识相同面的单元格-顶点对。然后你可以检查任一单元格(或任一顶点)是否无限以确定小平面是否在凸包上。

#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Delaunay_triangulation_3.h>

#include <fstream>

typedef CGAL::Exact_predicates_inexact_constructions_kernel K;

typedef CGAL::Delaunay_triangulation_3<K>  Triangulation;
typedef Triangulation::Point               Point;

int main( )
{
  // read some points from a file
  std::ifstream in("data/threed.cin");
  std::istream_iterator<Point> begin(in);
  std::istream_iterator<Point> end;

  // form the Delaunay triangulation of the points
  Triangulation T;
  T.insert(begin, end);

  // check each finite face to identify those on the convex hull    
  for (auto facet: T.finite_facets())
  {
    if (T.is_infinite(facet.first) ||
        T.is_infinite(T.mirror_facet(facet).first))
    {
      // this facet is on the convex hull
    }
    else
    {
      // this facet is not on the convex hull
    }
  }

  return 0;
}