CGAL三角测量:非常慢点插入

时间:2018-03-02 08:51:43

标签: c++ cgal triangulation voronoi delaunay

我正在尝试用the CGAL library计算3D周期性Delaunay三角剖分,使用给定here作为起点的示例:

typedef CGAL::Exact_predicates_inexact_constructions_kernel   K;
typedef CGAL::Periodic_3_Delaunay_triangulation_traits_3<K>   Gt;
typedef CGAL::Periodic_3_Delaunay_triangulation_3<Gt>         P3DT3;
typedef CGAL::Creator_uniform_3<double, Point> Creator;
typedef P3DT3::Point             Point;
//...
//...
CGAL::Random random(7);
CGAL::Random_points_in_cube_3<Point, Creator> in_cube(.5, random);
int n = 10000;
std::vector<Point> pts;
P3DT3 T;
// Generating n random points
for (int i=0 ; i < n ; i++) {
    Point p = *in_cube;
    in_cube++;
    pts.push_back(Point(p.x()+.5,p.y()+.5,p.z()+.5));
}
for (int i=0; i<n; i++)
{
    T.insert(pts[i]);
}

它们提供了三种插入点的可能性,每种点都非常快。但是,如果我采用上面的示例并插入自定义点(而不是随机点),插入速度几乎要慢100倍。但结果是一样的。这是一个代码示例:

typedef CGAL::Exact_predicates_inexact_constructions_kernel   K;
typedef CGAL::Periodic_3_Delaunay_triangulation_traits_3<K>   Gt;
typedef CGAL::Periodic_3_Delaunay_triangulation_3<Gt>         P3DT3;
typedef CGAL::Creator_uniform_3<double, Point> Creator;
typedef P3DT3::Point             Point;
//...
//...
int n = 10000;
std::vector< std::vector<float> > pts(n); // my custom points
P3DT3 T;
for (int i = 0; i < n; i++)
{
    Point p(pts[i][0],pts[i][1],pts[i][2]);
    T.insert(p);
}

我做错了吗?我需要插入一个非常大的点集(~10 ^ 7 - 10 ^ 8),因此速度至关重要。

0 个答案:

没有答案