2017-08-01 83 views
1

我剛從CGAL開始,因此我的問題,因爲我覺得你應該能夠比循環遍歷頂點更容易地翻譯CGAL :: Polygon_2。Translate CGAL多邊形沒有通過頂點循環

當前的方式我這樣做是這樣的:

 //Headers and typdef 
     #include <CGAL/Exact_predicates_exact_constructions_kernel.h> 
     #include <CGAL/Boolean_set_operations_2.h> 
     #include <CGAL/aff_transformation_tags.h> 
     typedef CGAL::Exact_predicates_exact_constructions_kernel Kernel; 
     typedef Kernel::Point_2      Point_2; 
     typedef CGAL::Polygon_2<Kernel>    Polygon_2; 
     typedef CGAL::Aff_transformation_2<Kernel> Transformation; 

     //Declare Polygon 
     Polygon_2 P; 
     P.push_back(Point_2(0, 0)); 
     P.push_back(Point_2(5, 0)); 
     P.push_back(Point_2(3.5, 1.5)); 

     //Loop through vertices and translate 
     Transformation translate(CGAL::TRANSLATION, CGAL_Vector(0.2, 0)); 
     typename CGAL::Polygon_2<Kernel>::Vertex_iterator vit; 

     //NOTE: This is the for loop that looks inefficient to me. 
     for (vit = P.vertices_begin(); vit != P.vertices_end(); ++vit) { 
      *vit = translate(*vit); 
     } 

有人可以給我一個指示這是否是要做到這一點,或給我指點如何做的更好的正確方法。

回答

1

您可以撥打transform免費功能,這將完全按照您的要求進行。

所以在代碼中,這樣做:

Transformation translate(CGAL::TRANSLATION, CGAL_Vector(0.4, 0)); 
P = transform(translate, P);