如何通过一些3D共面顶点生成delaunay作者:CGAL

问题描述:

我是用cgal库开发的新手,我试过下面的代码在2D中生成delaunay。如何通过一些3D共面顶点生成delaunay作者:CGAL

#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() 
 
{ 
 
\t std::vector<Point> PL; 
 
\t PL.push_back(Point(0, 0)); 
 
\t PL.push_back(Point(1, 0)); 
 
\t PL.push_back(Point(1, 1)); 
 
\t PL.push_back(Point(0, 1)); 
 
\t auto a = PL.begin(); 
 

 
\t Triangulation T; 
 
\t T.insert(PL.begin(),PL.end()); 
 
\t Triangulation::Finite_faces_iterator Finite_face_iterator; 
 

 
\t for (Finite_face_iterator = T.finite_faces_begin(); Finite_face_iterator != T.finite_faces_end(); ++Finite_face_iterator) 
 
\t { 
 
\t \t std::cerr << T.triangle(Finite_face_iterator) << std::endl; 
 
\t } 
 

 
\t return 0; 
 
}

那些代码输出两个面,并且如果顶点改变到3D像 点(0,0,0), 点(1,0,0), 点( 1,1,0), Point(0,1,0) 这四个顶点位于同一平面内,我怎样才能输出两个不与CGAL相交的面?

您可以使用Delaunay_triangulation_3类来达到此目的。它将处理共面点作为维2的特例。那么,所有点必须完全共面。

另一个选择是使用Delaunay_triangulation_2,通过投影你的点到它们所属的平面。这将处理几乎共面的点。

+0

谢谢,我马上试试 – wrsjhhe