Classes | |
class | Gudhi::cech_complex::Cech_complex< Kernel, SimplicialComplexForCechComplex > |
Cech complex class. More... | |
Functions | |
template<typename Kernel , typename SimplicialComplexForMEB , typename PointRange > | |
void | Gudhi::cech_complex::assign_MEB_filtration (Kernel &&k, SimplicialComplexForMEB &complex, PointRange const &points, bool exact=false) |
Given a simplicial complex and an embedding of its vertices, this assigns to each simplex a filtration value equal to the squared radius of its minimal enclosing ball (MEB). More... | |
Čech complex (Wikipedia) is a simplicial complex constructed from a proximity graph. The set of all simplices is filtered by the radius of their minimal enclosing ball.
The input shall be a range of points where a point is defined as CGAL kernel Point_d.
Cech_complex first builds a proximity graph from a point cloud. The filtration value of each edge of the Gudhi::Proximity_graph
is computed using CGAL kernel functions.
All edges that have a filtration value strictly greater than a user given maximal radius value, \(max\_radius\), are not inserted into the complex.
Vertex name correspond to the index of the point in the given range (aka. the point cloud).
When creating a simplicial complex from this proximity graph, Cech_complex inserts the proximity graph into the simplicial complex data structure, and then expands the simplicial complex when required.
On this example, as edges \((x,y)\), \((y,z)\) and \((z,y)\) are in the complex, the minimal ball radius containing the points \((x,y,z)\) is computed.
\((x,y,z)\) is inserted to the simplicial complex with the filtration value set with \(mini\_ball\_radius(x,y,z))\) iff \(mini\_ball\_radius(x,y,z)) \leq max\_radius\).
And so on for higher dimensions.
This radius computation is the reason why the Cech_complex is taking much more time to be computed than the Rips complex but it offers more topological guarantees.
If you already have a simplicial complex, it is possible to assign to each simplex a filtration value corresponding to the squared radius of its minimal enclosing ball using assign_MEB_filtration()
. This can provide an alternate way of computing a Čech filtration, or it can be used on a Delaunay triangulation to compute a Delaunay-Čech filtration.
This example builds the proximity graph from the given points, and maximal radius values. Then it creates a Simplex_tree
with it.
Then, it is asked to display information about the simplicial complex.
When launching (maximal enclosing ball radius is 1., is expanded until dimension 2):
the program output is:
void Gudhi::cech_complex::assign_MEB_filtration | ( | Kernel && | k, |
SimplicialComplexForMEB & | complex, | ||
PointRange const & | points, | ||
bool | exact = false |
||
) |
Given a simplicial complex and an embedding of its vertices, this assigns to each simplex a filtration value equal to the squared radius of its minimal enclosing ball (MEB).
Applied on a Čech complex, it recomputes the same values (squared). Applied on a Delaunay triangulation, it computes the Delaunay-Čech filtration.
Kernel | CGAL kernel: either Epick_d or Epeck_d. |
PointRange | Random access range of Kernel::Point_d . |
[in] | k | The geometric kernel. |
[in] | complex | The simplicial complex. |
[in] | points | Embedding of the vertices of the complex. |
[in] | exact | If true and Kernel is CGAL::Epeck_d, the filtration values are computed exactly. Default is false. |