template<class PolygonMesh>
struct CGAL::Convex_hull_hierarchy< PolygonMesh >
This class stores a convex hull in a data structure optimized for fast intersection tests.
More specifically, the structure is optimized for CGAL::extreme_vertex_3(), which is used by CGAL::Convex_hull_3::do_intersect(). The computational complexities of CGAL::extreme_point_3() and consequently CGAL::Convex_hull_3::do_intersect() is \(O(n)\) for a range of points, \(O(\sqrt{n})\) on average for a graph and \(O(\log{n})\) on average for a Convex_hull_hierarchy, where \(n\) is the number of points of the object.
Building this structure has linear complexity and is faster than computing a convex hull, but more costly than a single call to CGAL::Convex_hull_3::do_intersect(). It is therefore relevant when many intersection queries are performed, particularly when a convex hull has a large number of vertices.
To evaluate this class, we generated convex hulls by sampling \(n\) random points on the unit sphere, computing their convex hulls, and performing intersection tests between them.
Average performance measurements (times in milliseconds).
| Sphere size | Hull build | Hierarchy build | do_intersect (Range) | do_intersect (Graph) | do_intersect (Hull Hierarchy) |
| 40 | 0.06431 | 0.006908 | 0.00260 | 0.00174 | 0.00170 |
| 100 | 0.18069 | 0.016147 | 0.00594 | 0.00260 | 0.00272 |
| 350 | 0.68038 | 0.076661 | 0.01976 | 0.00735 | 0.00697 |
| 1,000 | 2.14852 | 0.207484 | 0.05664 | 0.02079 | 0.01292 |
| 3,500 | 7.49052 | 0.740683 | 0.19527 | 0.04876 | 0.01842 |
| 10,000 | 22.7057 | 2.22908 | 0.54977 | 0.07595 | 0.02789 |
| 35,000 | 93.7957 | 8.512 | 2.00917 | 0.13722 | 0.03730 |
| 100,000 | 399.377 | 32.0424 | 5.50728 | 0.39127 | 0.05841 |
- Template Parameters
-
- Examples
- Convex_hull_3/do_intersect_ch3.cpp.
|
| template<typename Graph , typename NamedParameters = parameters::Default_named_parameters> |
| | Convex_hull_hierarchy (const Graph &g, const NamedParameters &np=parameters::default_values()) |
| | constructor taking the points associated to the vertices of g.
|
| |
| template<typename RangeIterator , typename Traits = Convex_hull_traits_3<GT , Mesh>> |
| | Convex_hull_hierarchy (RangeIterator begin, RangeIterator end, const Traits &traits=Traits()) |
| | constructor taking the points in the range [first, last).
|
| |
|
const PolygonMesh & | mesh () const |
| | returns a const reference to the mesh stored by the class.
|
| |
|
PolygonMesh & | mesh () |
| | returns a reference to the mesh stored by the class.
|
| |
| template<typename Direction_3 , typename NamedParameters = parameters::Default_named_parameters> |
| vertex_descriptor | extreme_vertex_3 (const Direction_3 &dir, const NamedParameters &np=parameters::default_values) const |
| | constructs the furthest point of the convex hull along the direction and returns the corresponding vertex.
|
| |