Learn to construct simplicial complexes from point cloud data using the Vietoris-Rips and Čech constructions.
Given a point cloud, how do we construct a simplicial complex that captures its topology? The key insight is to use distance: points that are close together should be connected. The Vietoris-Rips complex is the most computationally tractable way to do this.
For a distance threshold ε (epsilon), the Vietoris-Rips complex VR(ε) includes a simplex [v₀, v₁, ..., vₖ] whenever all pairs of vertices are within distance ε. As ε increases, more simplices appear, and we can track how topological features emerge and disappear.
Watch the Vietoris-Rips complex form as you increase ε. Notice how connected components (β₀) merge together, and how loops (β₁) appear and then fill in. Press Play to animate the filtration automatically.
The Vietoris-Rips complex connects points within distance ε and fills in all cliques. Watch how topological features (components, loops) appear and disappear as ε increases.
In words: a simplex is included if and only if every pair of its vertices is within distance ε. This is equivalent to saying that the simplex is aclique in the graph where vertices are connected if they're within distance ε.
The Čech complex Č(ε) includes a simplex [v₀, ..., vₖ] if the balls of radius ε/2 centered at each vertex have a common intersection. This is geometrically natural — it's the nerve of the ball covering — but harder to compute.
This interleaving theorem guarantees that VR and Čech have similar persistent homology. In practice, we usually compute VR because it only requires pairwise distances (no intersection tests), making it much more efficient.
As ε increases from 0 to ∞, we get a nested sequence of complexes:
This nested sequence is called a filtration. Each simplex has abirth time — the smallest ε at which it appears. For the VR complex:
The VR complex can grow exponentially with the number of points. For n points, the number of k-simplices is bounded by C(n, k+1), which is O(nᵏ⁺¹). In practice, we limit computation to low dimensions (typically k ≤ 2 or 3) and use sparse representations.