I've been learning about discrete differential geometry these past few weeks and thought I'd write up what I've learnt to solidify my understanding. These are concise notes for myself and anyone else learning the topic, rather than a full tutorial.

Simplices

The first concept is the k-simplex. A k-simplex is the simplest geometric primitive you can build in $k$ dimensions: it's the convex hull of $k+1$ affinely independent points (meaning no point lies in the affine span of the others). "Affinely independent" is just the requirement that the points actually span $k$ dimensions and don't collapse onto a lower flat. Three collinear points don't make a real triangle, and four coplanar points don't make a real tetrahedron.

  • 0-simplex: a vertex (1 point)
  • 1-simplex: an edge (2 points)
  • 2-simplex: a triangle (3 points)
  • 3-simplex: a tetrahedron (4 points)

We usually write a simplex as the ordered tuple of its vertices, e.g. $\sigma = [a, b, c]$ for a triangle. The ordering matters because it gives the simplex an orientation: $[a,b,c]$ and $[b,a,c]$ are the same set of points but opposite orientations, which becomes important once we start integrating things over them.

Example Simplices

Faces

A face of a simplex is any simplex you can form from a non-empty subset of its vertices. So every face is itself a simplex of lower (or equal) dimension. For a triangle $[a,b,c]$ the faces are:

  • 2-dimensional face: the triangle $[a,b,c]$ itself (every simplex is a face of itself)
  • 1-dimensional faces: the edges $[a,b], [b,c], [a,c]$
  • 0-dimensional faces: the vertices $[a], [b], [c]$

If we want to exclude the simplex itself we call the rest its proper faces.

Simplicial complex

A simplicial complex $K$ is a collection of simplices that fit together cleanly. "Cleanly" means two rules:

  1. Every face of a simplex in $K$ is also in $K$. (If you've got a triangle, you must also have its edges and vertices.)
  2. The intersection of any two simplices in $K$ is either empty or a face of both. (Triangles can share an edge or a vertex, but they can't cross through each other or overlap partially.)

This is what makes a simplicial complex a "nice" mesh: it's a discrete stand-in for a smooth surface or manifold, with no weird self-intersections. A triangle mesh of a 3D model is the canonical example.

Star, closure, and link

These three operators let us talk about neighbourhoods of a simplex inside a complex. They play the role that "open ball around a point" plays in smooth topology.

Closure

The closure $\mathrm{Cl}(S)$ of a set of simplices $S$ is the smallest simplicial complex containing $S$. In practice: take everything in $S$, then add all the faces. It goes down in dimension.

$$\mathrm{Cl}(S) = \{ \tau : \tau \text{ is a face of some } \sigma \in S \}$$

Example: for a single triangle $[a,b,c]$,

$$\mathrm{Cl}([a,b,c]) = \{\, [a,b,c],\ [a,b],\ [b,c],\ [a,c],\ [a],\ [b],\ [c] \,\}$$

Closure is what turns a loose pile of top-dimensional simplices into a valid simplicial complex.

Star

The star $\mathrm{St}(\sigma)$ of a simplex $\sigma$ is the set of all simplices in the complex that have $\sigma$ as a face. It goes up in dimension.

$$\mathrm{St}(\sigma) = \{ \tau \in K : \sigma \text{ is a face of } \tau \}$$

Concrete example: imagine a vertex $a$ in a triangle mesh, surrounded by triangles $[a,b,c], [a,c,d], [a,d,e]$. The star of $a$ is:

$$\mathrm{St}(a) = \{\, [a],\ [a,b],\ [a,c],\ [a,d],\ [a,e],\ [a,b,c],\ [a,c,d],\ [a,d,e] \,\}$$

Note the star is generally not a simplicial complex on its own. It contains $[a,b,c]$ but not the opposite edge $[b,c]$, which breaks rule 1 of a simplicial complex. Those missing pieces are exactly what the link picks up.

Link

The link $\mathrm{Lk}(\sigma)$ is the "boundary" of the neighbourhood: everything around $\sigma$ that doesn't touch it. Formally:

$$\mathrm{Lk}(\sigma) = \mathrm{Cl}(\mathrm{St}(\sigma)) \setminus \mathrm{St}(\mathrm{Cl}(\sigma))$$

Read that as: take the closed neighbourhood, then remove anything that still touches $\sigma$ or any of its faces. What's left are the simplices "across the way" from $\sigma$.

For the vertex $a$ with star as above, the link is the cycle of edges and vertices opposite $a$:

$$\mathrm{Lk}(a) = \{\, [b],\ [c],\ [d],\ [e],\ [b,c],\ [c,d],\ [d,e] \,\}$$

On a well-behaved 2D mesh, the link of an interior vertex is always a closed loop. If it isn't, the vertex is on the boundary or the mesh is non-manifold there, so the link doubles as a local sanity check on mesh topology. The example above is an open path from $b$ to $e$, which tells us $a$ sits on the boundary. Add a fourth triangle $[a,e,b]$ and the path closes into a loop.

k-vectors

A k-vector is an oriented $k$-dimensional volume element, built by wedging vectors together. The wedge product $\wedge$ is antisymmetric ($u \wedge v = -\, v \wedge u$), which is what bakes orientation into the algebra.

  • 0-vector: a scalar.
  • 1-vector: an ordinary vector, with magnitude and direction.
  • 2-vector (bivector): $u \wedge v$, representing an oriented area. You can picture it as the parallelogram spanned by $u$ and $v$, with a sign telling you which way around its boundary you walk.
  • 3-vector (trivector): $u \wedge v \wedge w$, an oriented volume. Picture the parallelepiped spanned by the three vectors with a handedness attached.

The important shift from "vector" to "k-vector" is that we no longer care about the specific vectors used to build it, only the oriented subspace and its magnitude. $u \wedge v$ and $(u + v) \wedge v$ describe the same bivector because $v \wedge v = 0$.

k-forms

A k-form is a linear map that eats a $k$-vector and spits out a scalar. Algebraically a k-form looks almost identical to a k-vector (same wedge-product machinery, same antisymmetry), but the role is different: k-vectors are the things being measured and k-forms are the measurements.

$$\alpha : \underbrace{V \times \cdots \times V}_{k \text{ times}} \to \mathbb{R}, \qquad \alpha(v_1, \dots, v_k) \in \mathbb{R}$$

Concretely: a 1-form on $\mathbb{R}^3$ like $\alpha = 2\,dx + 3\,dy$ takes a vector $v = (v_x, v_y, v_z)$ and returns $2 v_x + 3 v_y$. A 2-form like $dx \wedge dy$ takes a bivector and returns its signed area projected onto the $xy$-plane. This is exactly the kind of object you integrate. "$\int f\, dx$" integrates the 1-form $f\,dx$ along a curve, feeding it the curve's tangent 1-vectors at each point.

The Hodge star

The Hodge star $\star$ is an isomorphism that swaps a $k$-form for an $(n-k)$-form on an $n$-dimensional space. The idea is that in $n$ dimensions, every $k$-subspace has a unique orthogonal complement of dimension $n-k$, and the Hodge star sends you to that complement, preserving magnitude.

$$\star : \Lambda^k(V) \to \Lambda^{n-k}(V)$$

On $\mathbb{R}^3$ with the standard basis:

$$\star\, dx = dy \wedge dz, \quad \star\, dy = dz \wedge dx, \quad \star\, dz = dx \wedge dy$$

This is why the cross product only really works in 3D: $u \times v$ is secretly $\star(u \wedge v)$, turning a bivector (the oriented area) into the 1-vector normal to it. In higher dimensions the wedge still makes sense but there's no longer a unique perpendicular vector, so the cross product breaks.

In discrete differential geometry, the Hodge star is what lets us pair primal mesh elements (vertices, edges, faces) with their dual elements (dual faces, dual edges, dual vertices). The discrete Hodge star is essentially a diagonal matrix of ratios of dual-to-primal sizes.

Sharp and flat operators

Sharp ($\sharp$) and flat ($\flat$) are the "musical isomorphisms" that translate between vectors and 1-forms using a metric (an inner product) $g$.

  • Flat $\flat$: vector $\to$ 1-form. Given a vector $v$, define the 1-form $v^\flat(w) = g(v, w)$. Flat lowers an index.
  • Sharp $\sharp$: 1-form $\to$ vector. The inverse: given a 1-form $\alpha$, $\alpha^\sharp$ is the unique vector such that $g(\alpha^\sharp, w) = \alpha(w)$ for all $w$. Sharp raises an index.

In Euclidean space with the standard dot product the distinction is invisible. A vector $(a,b,c)$ and the 1-form $a\,dx + b\,dy + c\,dz$ look identical, and $\sharp$ and $\flat$ amount to "drop the $d$'s" or "add them back". The distinction matters once the metric isn't the identity (curved surfaces, relativity, anisotropic materials), because then raising and lowering indices changes the numbers.

The names come from musical notation: flat lowers a note and sharp raises it, which is what these operators do to tensor indices.