Simplicial Complexes from Point Clouds

Vietoris-Rips Complex

Given a set of points S in (ℝ^n) and a parameter ϵ>0, the Vietoris-Rips complex (Subscript[VR, ϵ])(S) is the complex whose simplices consist of subsets of S consisting of points that are pairwise within ϵ. That is, {σ⊂S : d(a,b)<=ϵ ∀ a,b ∈σ}.

Write a function that computes the Vietoris-Rips complex (Subscript[VR, ϵ])(S). The input and output of your function should be as follows:
Input: A list of points S in (ℝ^n) and a parameter ϵ>0
Output: A list of all simplices in (Subscript[VR, ϵ])(S), specified as lists of vertex indexes

Čech Complex

Given a set of points S in (ℝ^n) and a parameter ϵ>0, the Čech complex (Subscript[C, ϵ])(S) is the complex whose simplices consist of subsets of S consisting of points that have mutually-intersecting ϵ-radius neighborhoods. That is, {σ⊂S : ∃y∈(ℝ^n) : d(a,y)<=ϵ ∀ a ∈σ}.

Write a function that computes the Čech complex (Subscript[C, ϵ])(S). The input and output of your function should be as follows:
Input: A list of points S in (ℝ^n) and a parameter ϵ>0
Output: A list of all simplices in (Subscript[C, ϵ])(S), specified as lists of vertex indexes

Visualizing 2D simplicial complexes

The following function visualizes a simplicial complex by drawing its 0-simplices (vertices), 1-simplices (edges), and 2-simplices (faces). It requires a complex (specified by sets of vertex indexes) and a list of 2D points.

draw2Dcomplex[complex_,points_]:=Module[
{verts={}, edges={}, faces={}},

(* make lists of simplices of each dimension *) 
Do[
If[Length[simplex]==1,AppendTo[verts,points[[simplex[[1]]]]]];
If[Length[simplex]==2,AppendTo[edges,points[[simplex]]]];
If[Length[simplex]==3,AppendTo[faces,points[[simplex]]]]
,{simplex,complex}];

(* return the drawing *) 
Graphics[{Blue,Opacity[0.4],Triangle[faces],Black,Opacity[1],Line[edges],PointSize[Medium],Point[verts]}] 
]

Visualizing 3D simplicial complexes

The following function visualizes a simplicial complex by drawing its 0-simplices (vertices), 1-simplices (edges), and 3-simplices (tetrahedra). It requires a complex (specified by sets of vertex indexes) and a list of 3D points.

draw3Dcomplex[complex_,points_]:=Module[
{verts={}, edges={}, faces={},tetrahedra={}},

(* make lists of simplices of each dimension *) 
Do[
If[Length[simplex]==1,AppendTo[verts,points[[simplex[[1]]]]]];
If[Length[simplex]==2,AppendTo[edges,points[[simplex]]]];
If[Length[simplex]==3,AppendTo[faces,points[[simplex]]]];
If[Length[simplex]==4,AppendTo[tetrahedra,points[[simplex]]]]
,{simplex,complex}];

(* return the drawing *) 
Graphics3D[{Blue,Opacity[0.4],Tetrahedron[tetrahedra],Black,Opacity[1],Thick, Line[edges],PointSize[Large],Point[verts]}] 
]

Question

What are the relationships between the Vietoris-Rips complex (Subscript[VR, ϵ])(S) and the Čech complex (Subscript[C, ϵ])(S)? As a function of the threshold parameter, when is one complex a subcomplex of the other?