平移 CGAL 多边形,而无需循环穿过折点

Translate CGAL Polygon without looping through vertices

本文关键字:循环 CGAL 多边形 平移      更新时间:2023-10-16

我刚开始使用CGAL,因此我提出了问题,因为我觉得你应该能够比循环顶点更容易地翻译CGAL::P olygon_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);
}

有人可以告诉我这是否是正确的方法,或者给我指示如何做得更好。

您可以调用transformfree 函数,该函数将完全按照您的要求执行。

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

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