我正在尝试用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),因此速度至关重要。