mirror of https://github.com/CGAL/cgal
improving hierarchy, adding tests
This commit is contained in:
parent
9c54b9f5da
commit
02eae34ffe
|
|
@ -2779,6 +2779,7 @@ Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/include/CGAL/_test_cl
|
||||||
Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/include/CGAL/_test_cls_periodic_3_offset_3.h -text
|
Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/include/CGAL/_test_cls_periodic_3_offset_3.h -text
|
||||||
Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/include/CGAL/_test_cls_periodic_3_triangulation_traits_3.h -text
|
Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/include/CGAL/_test_cls_periodic_3_triangulation_traits_3.h -text
|
||||||
Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/include/CGAL/_test_periodic_3_static_filters.h -text
|
Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/include/CGAL/_test_periodic_3_static_filters.h -text
|
||||||
|
Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/test_periodic_3_delaunay_hierarchy_3.cpp -text
|
||||||
Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/test_periodic_3_offset_3.cpp -text
|
Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/test_periodic_3_offset_3.cpp -text
|
||||||
Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/test_periodic_3_triangulation_traits_3.cpp -text
|
Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/test_periodic_3_triangulation_traits_3.cpp -text
|
||||||
Point_set_2/doc_tex/Point_set_2/point_set.png -text
|
Point_set_2/doc_tex/Point_set_2/point_set.png -text
|
||||||
|
|
|
||||||
|
|
@ -54,12 +54,13 @@ public:
|
||||||
|
|
||||||
using PTr_Base::number_of_vertices;
|
using PTr_Base::number_of_vertices;
|
||||||
using PTr_Base::geom_traits;
|
using PTr_Base::geom_traits;
|
||||||
using PTr_Baes::is_virtual;
|
using PTr_Base::is_virtual;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// here is the stack of triangulations which form the hierarchy
|
// here is the stack of triangulations which form the hierarchy
|
||||||
PTr_Base* hierarchy[maxlevel];
|
PTr_Base* hierarchy[maxlevel];
|
||||||
Random random; // random generator
|
Random random; // random generator
|
||||||
|
int level_mult_cover;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Periodic_3_triangulation_hierarchy_3(
|
Periodic_3_triangulation_hierarchy_3(
|
||||||
|
|
@ -73,7 +74,7 @@ public:
|
||||||
Periodic_3_triangulation_hierarchy_3(InputIterator first, InputIterator last,
|
Periodic_3_triangulation_hierarchy_3(InputIterator first, InputIterator last,
|
||||||
const Iso_cuboid& domain = Iso_cuboid(0,0,0,1,1,1),
|
const Iso_cuboid& domain = Iso_cuboid(0,0,0,1,1,1),
|
||||||
const Geom_traits& traits = Geom_traits())
|
const Geom_traits& traits = Geom_traits())
|
||||||
: PTr_Base(domain,traits), random((long)0)
|
: PTr_Base(domain,traits), random((long)0), level_mult_cover(0)
|
||||||
{
|
{
|
||||||
hierarchy[0] = this;
|
hierarchy[0] = this;
|
||||||
for(int i=1; i<maxlevel; ++i)
|
for(int i=1; i<maxlevel; ++i)
|
||||||
|
|
@ -105,37 +106,36 @@ public:
|
||||||
template < class InputIterator >
|
template < class InputIterator >
|
||||||
int insert(InputIterator first, InputIterator last, bool = false)
|
int insert(InputIterator first, InputIterator last, bool = false)
|
||||||
{
|
{
|
||||||
int n = number_of_vertices();
|
int n = number_of_vertices();
|
||||||
|
|
||||||
std::vector<Point> points (first, last);
|
std::vector<Point> points (first, last);
|
||||||
std::random_shuffle (points.begin(), points.end());
|
std::random_shuffle (points.begin(), points.end());
|
||||||
spatial_sort (points.begin(), points.end(), geom_traits());
|
spatial_sort (points.begin(), points.end(), geom_traits());
|
||||||
|
|
||||||
// hints[i] is the cell of the previously inserted point in level i.
|
// hints[i] is the cell of the previously inserted point in level i.
|
||||||
// Thanks to spatial sort, they are better hints than what the hierarchy
|
// Thanks to spatial sort, they are better hints than what the hierarchy
|
||||||
// would give us.
|
// would give us.
|
||||||
Cell_handle hints[maxlevel];
|
Cell_handle hints[maxlevel];
|
||||||
for (typename std::vector<Point>::const_iterator p = points.begin(), end = points.end();
|
for (typename std::vector<Point>::const_iterator p = points.begin(),
|
||||||
p != end; ++p)
|
end = points.end(); p != end; ++p) {
|
||||||
{
|
int vertex_level = random_level();
|
||||||
int vertex_level = random_level();
|
|
||||||
|
|
||||||
Vertex_handle v = hierarchy[0]->insert (*p, hints[0]);
|
Vertex_handle v = hierarchy[0]->insert (*p, hints[0]);
|
||||||
hints[0] = v->cell();
|
hints[0] = v->cell();
|
||||||
|
|
||||||
Vertex_handle prev = v;
|
Vertex_handle prev = v;
|
||||||
|
|
||||||
for (int level = 1; level <= vertex_level; ++level) {
|
for (int level = 1; level <= vertex_level; ++level) {
|
||||||
v = hierarchy[level]->insert (*p, hints[level]);
|
v = hierarchy[level]->insert (*p, hints[level]);
|
||||||
hints[level] = v->cell();
|
hints[level] = v->cell();
|
||||||
|
|
||||||
v->set_down (prev);
|
v->set_down (prev);
|
||||||
prev->set_up (v);
|
prev->set_up (v);
|
||||||
prev = v;
|
prev = v;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return number_of_vertices() - n;
|
return number_of_vertices() - n;
|
||||||
}
|
}
|
||||||
|
|
||||||
// bool only for backward compatibility, we document void.
|
// bool only for backward compatibility, we document void.
|
||||||
|
|
@ -185,7 +185,7 @@ template <class PTr >
|
||||||
Periodic_3_triangulation_hierarchy_3<PTr>::
|
Periodic_3_triangulation_hierarchy_3<PTr>::
|
||||||
Periodic_3_triangulation_hierarchy_3(
|
Periodic_3_triangulation_hierarchy_3(
|
||||||
const Iso_cuboid& domain, const Geom_traits& traits)
|
const Iso_cuboid& domain, const Geom_traits& traits)
|
||||||
: PTr_Base(domain, traits), random((long)0)
|
: PTr_Base(domain, traits), random((long)0), level_mult_cover(0)
|
||||||
{
|
{
|
||||||
hierarchy[0] = this;
|
hierarchy[0] = this;
|
||||||
for(int i=1;i<maxlevel;++i)
|
for(int i=1;i<maxlevel;++i)
|
||||||
|
|
@ -197,7 +197,7 @@ template <class PTr>
|
||||||
Periodic_3_triangulation_hierarchy_3<PTr>::
|
Periodic_3_triangulation_hierarchy_3<PTr>::
|
||||||
Periodic_3_triangulation_hierarchy_3(
|
Periodic_3_triangulation_hierarchy_3(
|
||||||
const Periodic_3_triangulation_hierarchy_3<PTr> &tr)
|
const Periodic_3_triangulation_hierarchy_3<PTr> &tr)
|
||||||
: PTr_Base(tr), random((long)0)
|
: PTr_Base(tr), random((long)0), level_mult_cover(tr.level_mult_cover)
|
||||||
{
|
{
|
||||||
hierarchy[0] = this;
|
hierarchy[0] = this;
|
||||||
for(int i=1; i<maxlevel; ++i)
|
for(int i=1; i<maxlevel; ++i)
|
||||||
|
|
@ -491,8 +491,12 @@ int
|
||||||
Periodic_3_triangulation_hierarchy_3<PTr>::
|
Periodic_3_triangulation_hierarchy_3<PTr>::
|
||||||
random_level()
|
random_level()
|
||||||
{
|
{
|
||||||
|
if ( level_mult_cover < maxlevel
|
||||||
|
&& hierarchy[level_mult_cover]->number_of_sheets() == make_array(1,1,1) )
|
||||||
|
++level_mult_cover;
|
||||||
|
|
||||||
int l = 0;
|
int l = 0;
|
||||||
while ( ! random(ratio) && l < maxlevel-1 )
|
while ( ! random(ratio) && l < level_mult_cover-1)
|
||||||
++l;
|
++l;
|
||||||
|
|
||||||
return l;
|
return l;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,83 @@
|
||||||
|
// Copyright (c) 1998 INRIA Sophia-Antipolis (France).
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// This file is part of CGAL (www.cgal.org); you may redistribute it under
|
||||||
|
// the terms of the Q Public License version 1.0.
|
||||||
|
// See the file LICENSE.QPL distributed with CGAL.
|
||||||
|
//
|
||||||
|
// Licensees holding a valid commercial license may use this file in
|
||||||
|
// accordance with the commercial license agreement provided with the software.
|
||||||
|
//
|
||||||
|
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
||||||
|
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
//
|
||||||
|
// $URL: svn+ssh://mcaroli@scm.gforge.inria.fr/svn/cgal/trunk/Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/test_periodic_3_delaunay_3.cpp $
|
||||||
|
// $Id: test_periodic_3_delaunay_3.cpp 48874 2009-04-23 13:54:38Z mcaroli $
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// Author(s) : Nico Kruithof
|
||||||
|
// Manuel Caroli
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include <fstream>
|
||||||
|
|
||||||
|
#include <CGAL/Periodic_3_Delaunay_triangulation_3.h>
|
||||||
|
#include <CGAL/Periodic_3_triangulation_hierarchy_3.h>
|
||||||
|
#include <CGAL/Periodic_3_triangulation_traits_3.h>
|
||||||
|
|
||||||
|
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
|
||||||
|
typedef CGAL::Exact_predicates_inexact_constructions_kernel K1;
|
||||||
|
typedef CGAL::Periodic_3_triangulation_traits_3<K1> PTT1;
|
||||||
|
typedef CGAL::Periodic_3_triangulation_ds_vertex_base_3<> DSVB1;
|
||||||
|
typedef CGAL::Periodic_3_triangulation_ds_cell_base_3<> DSCB1;
|
||||||
|
typedef CGAL::Triangulation_vertex_base_3<PTT1,DSVB1> VBB1;
|
||||||
|
typedef CGAL::Periodic_3_triangulation_hierarchy_vertex_base_3<VBB1> VB1;
|
||||||
|
typedef CGAL::Triangulation_cell_base_3<PTT1,DSCB1> CB1;
|
||||||
|
typedef CGAL::Triangulation_data_structure_3<VB1,CB1> TDS1;
|
||||||
|
typedef CGAL::Periodic_3_Delaunay_triangulation_3<PTT1,TDS1> PDT1;
|
||||||
|
// Explicit instantiation of the whole class :
|
||||||
|
template class CGAL::Periodic_3_triangulation_hierarchy_3<PDT1>;
|
||||||
|
|
||||||
|
#include <CGAL/Exact_predicates_exact_constructions_kernel.h>
|
||||||
|
typedef CGAL::Exact_predicates_exact_constructions_kernel K2;
|
||||||
|
typedef CGAL::Periodic_3_triangulation_traits_3<K2> PTT2;
|
||||||
|
typedef CGAL::Periodic_3_triangulation_ds_vertex_base_3<> DSVB2;
|
||||||
|
typedef CGAL::Periodic_3_triangulation_ds_cell_base_3<> DSCB2;
|
||||||
|
typedef CGAL::Triangulation_vertex_base_3<PTT2,DSVB2> VBB2;
|
||||||
|
typedef CGAL::Periodic_3_triangulation_hierarchy_vertex_base_3<VBB2> VB2;
|
||||||
|
typedef CGAL::Triangulation_cell_base_3<PTT2,DSCB2> CB2;
|
||||||
|
typedef CGAL::Triangulation_data_structure_3<VB2,CB2> TDS2;
|
||||||
|
typedef CGAL::Periodic_3_Delaunay_triangulation_3<PTT2,TDS2> PDT2;
|
||||||
|
// Explicit instantiation of the whole class :
|
||||||
|
template class CGAL::Periodic_3_triangulation_hierarchy_3<PDT2>;
|
||||||
|
|
||||||
|
#include <CGAL/MP_Float.h>
|
||||||
|
#include <CGAL/Simple_homogeneous.h>
|
||||||
|
typedef CGAL::Simple_homogeneous<CGAL::MP_Float> K3;
|
||||||
|
typedef CGAL::Periodic_3_triangulation_traits_3<K3> PTT3;
|
||||||
|
typedef CGAL::Periodic_3_triangulation_ds_vertex_base_3<> DSVB3;
|
||||||
|
typedef CGAL::Periodic_3_triangulation_ds_cell_base_3<> DSCB3;
|
||||||
|
typedef CGAL::Triangulation_vertex_base_3<PTT3,DSVB3> VBB3;
|
||||||
|
typedef CGAL::Periodic_3_triangulation_hierarchy_vertex_base_3<VBB3> VB3;
|
||||||
|
typedef CGAL::Triangulation_cell_base_3<PTT3,DSCB3> CB3;
|
||||||
|
typedef CGAL::Triangulation_data_structure_3<VB3,CB3> TDS3;
|
||||||
|
typedef CGAL::Periodic_3_Delaunay_triangulation_3<PTT3,TDS3> PDT3;
|
||||||
|
// Explicit instantiation of the whole class :
|
||||||
|
template class CGAL::Periodic_3_triangulation_hierarchy_3<PDT3>;
|
||||||
|
|
||||||
|
#include <CGAL/_test_cls_periodic_3_delaunay_3.h>
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
typedef CGAL::Periodic_3_triangulation_hierarchy_3< PDT1 > P3T3_1;
|
||||||
|
_test_cls_periodic_3_delaunay_3( P3T3_1() );
|
||||||
|
|
||||||
|
typedef CGAL::Periodic_3_triangulation_hierarchy_3< PDT2 > P3T3_2;
|
||||||
|
// this takes too much time for the test suite.
|
||||||
|
//_test_cls_periodic_3_delaunay_3( P3T3_2() );
|
||||||
|
|
||||||
|
typedef CGAL::Periodic_3_triangulation_hierarchy_3< PDT3 > P3T3_3;
|
||||||
|
// this takes too much time for the test suite.
|
||||||
|
//_test_cls_periodic_3_delaunay_3( P3T3_3(), true );
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue