我开始使用CGAL使用以下代码对一组点进行三角测量
#include <iostream>
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Delaunay_triangulation_2.h>
#include <CGAL/Triangulation_vertex_base_with_info_2.h>
typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef CGAL::Triangulation_vertex_base_2<K> Vb;
typedef CGAL::Triangulation_face_base_2<K> Fb;
typedef CGAL::Triangulation_data_structure_2<Vb,Fb> Tds;
typedef CGAL::Delaunay_triangulation_2<K,Tds> Triangulation;
typedef Triangulation::Point Point;
typedef Triangulation::Triangulation_data_structure tds;
using namespace std;
void main()
{
Triangulation t;
t.insert(Point(0,0));
t.insert(Point(0,20));
t.insert(Point(30,15));
t.insert(Point(30,-15));
Triangulation::Finite_faces_iterator fib = t.finite_faces_begin(), it;
Triangulation::Finite_faces_iterator fie = t.finite_faces_end();
Triangulation::Triangle tri;
std::cout << "Triangular faces"<<endl;
for (it=fib; it!=fie; ++it)
{
tri = t.triangle(it);
std::cout<<tri[0]<<" "<<tri[1]<<" "<<tri[2]<<" "<<endl;
}
char c;
std::cin>>c;
}
这会将面打印为0,20 0,0 30,15和0,0 30,-15 30,15。我不满意这个输出,因为第一个三角形完全位于第二个三角形内。据我了解三角测量,它应该返回3个三角形而不仅仅是2个覆盖我的4个输入点的复杂船体,并且应该没有重叠的三角形。有人可以解释我做错了吗?
我的最终目标是在最小角度约束下对凸多边形进行三角剖分(并通过在集合中添加额外的点)。任何CGAL代码示例都将受到赞赏。
谢谢,
答案 0 :(得分:0)
我不认为你完全理解这里发生的几何形状或三角测量,所以我已经绘制了一些图片。
这是您的设置:
这是Delaunay_Triangulation_2生成的第一个三角形:
(0,20),(0,0),(30,15)
这是第二个生成的三角形:
(0,0)(30,-15)(30,15)
显然,两个三角形都不包含在另一个中。此外,三角形的并集,移除共享边缘,完美地创建了点的凸包。
另外,假设你总共只有4个点,那么就不可能构造3个三角形的三角形,其中没有重叠,因此只创建了2个。