如何通过一些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,通过投影你的点到它们所属的平面。这将处理几乎共面的点。
谢谢,我马上试试 – wrsjhhe