C++ 在不通过顶点循环的情况下平移CGAL多边形

C++ 在不通过顶点循环的情况下平移CGAL多边形,c++,polygon,cgal,C++,Polygon,Cgal,我刚开始使用CGAL,因此我提出了我的问题,因为我觉得翻译CGAL::Polygon_2应该比循环遍历顶点更容易 我目前的做法是: //Headers and typdef #include <CGAL/Exact_predicates_exact_constructions_kernel.h> #include <CGAL/Boolean_set_operations_2.h> #include <C

我刚开始使用CGAL,因此我提出了我的问题,因为我觉得翻译CGAL::Polygon_2应该比循环遍历顶点更容易

我目前的做法是:

        //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);
        }
//标题和类型定义
#包括
#包括
#包括
typedef CGAL::精确谓词\u精确构造\u内核;
typedef内核::Point_2 Point_2;
typedef CGAL::Polygon_2 Polygon_2;
typedef CGAL::Aff_变换_2变换;
//声明多边形
多边形_2p;
P.向后推(点2(0,0));
P.推回(点2(5,0));
P.向后推(点2(3.5,1.5));
//循环遍历顶点并平移
变换平移(CGAL::TRANSLATION,CGAL_向量(0.2,0));
typename CGAL::Polygon_2::Vertex_迭代器vit;
//注意:在我看来,这是一个效率低下的for循环。
对于(vit=P.顶点_begin();vit!=P.顶点_end();++vit){
*vit=翻译(*vit);
}
有没有人能告诉我这是否是正确的方法,或者告诉我如何做得更好。

你可以调用自由函数,它将完全满足你的需要

因此,在代码中,请执行以下操作:

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