CGAL三角测量失败

时间:2014-10-21 21:03:13

标签: c++ triangulation cgal

我开始使用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代码示例都将受到赞赏。

谢谢,

1 个答案:

答案 0 :(得分:0)

我不认为你完全理解这里发生的几何形状或三角测量,所以我已经绘制了一些图片。

这是您的设置:

enter image description here

这是Delaunay_Triangulation_2生成的第一个三角形:

  

(0,20),(0,0),(30,15)

enter image description here

这是第二个生成的三角形:

  

(0,0)(30,-15)(30,15)

enter image description here

显然,两个三角形都不包含在另一个中。此外,三角形的并集,移除共享边缘,完美地创建了点的凸包。

另外,假设你总共只有4个点,那么就不可能构造3个三角形的三角形,其中没有重叠,因此只创建了2个。