2014-10-21 135 views
-2

我开始使用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代码示例将不胜感激。

感谢,

回答

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

显然,既不三角形被包含在另一个内。此外,三角形的联合,删除共享边,完美地创建点的凸包。

此外,考虑到你只有四个点总数,不可能构造一个三角形的三个三角形没有重叠,因此只有2个被创建。

+0

谢谢,我交换了我的(20,0)点的坐标,因此最近2个小时的混乱! – halberlinn 2014-10-21 21:41:42