我是使用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相交的两个面?

最佳答案

为此,可以使用Delaunay_triangulation_3类。然后将共面点作为维度2的特例处理。然后,所有点都必须完全共面。

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

关于c++ - 如何通过某些3D共面顶点生成Delaunay作者:CGAL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46233461/

10-11 21:36