我是使用cgal库开发的新手,我尝试使用以下代码在2D中生成delaunay。
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Constrained_Delaunay_triangulation_2.h>
#include <CGAL/Delaunay_triangulation_2.h>
#include <cassert>
#include <iostream>
typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef CGAL::Delaunay_triangulation_2<K> Triangulation;
typedef Triangulation::Point Point;
int main()
{
std::vector<Point> PL;
PL.push_back(Point(0, 0));
PL.push_back(Point(1, 0));
PL.push_back(Point(1, 1));
PL.push_back(Point(0, 1));
auto a = PL.begin();
Triangulation T;
T.insert(PL.begin(),PL.end());
Triangulation::Finite_faces_iterator Finite_face_iterator;
for (Finite_face_iterator = T.finite_faces_begin(); Finite_face_iterator != T.finite_faces_end(); ++Finite_face_iterator)
{
std::cerr << T.triangle(Finite_face_iterator) << std::endl;
}
return 0;
}
那些代码输出两个面,如果顶点变为3D就好了 点(0,0,0), 点(1,0,0), 点(1,1,0), 点(0,1,0) 那四个顶点在同一平面上,如何输出两个未与CGAL相交的面?
答案 0 :(得分:1)
您可以使用Delaunay_triangulation_3类来实现此目的。它处理共面点作为维2的特殊情况。所有点必须完全共面,然后。
另一种选择是使用Delaunay_triangulation_2,将你的点投射到它们所属的平面上。这将处理几乎共面的点。