Digital Representation and Analysis of Shapes
CSC_51074_EP · Year 1 · Period 1
Contents
- Introduction and overview
- 0. Refresher: convexity, least squares, eigenvalues
- 1. Representing a shape: meshes and half-edges
- 2. Voronoi diagrams and duality
- 3. Delaunay triangulations: the empty circle criterion
- 4. Sampling and reconstruction of surfaces
- 5. Smoothing: from uniform to cotangent Laplacian
- 6. Simplification and remeshing
- 7. Discrete curvature and Gauss–Bonnet
- 8. The spectrum of shapes
- 9. Combinatorial topology: Euler, Betti, persistence
- 10. Course research notes (Desbrun, Memari)
- Exercises
- Projects and assessment
- References
Introduction and overview
| Module | Digital Representation and Analysis of Shapes |
| Code | CSC_51074_EP |
| Team and workload | Course coordinators (“Responsables” on the 2026-2027 sheet): Mathieu Desbrun and Maks Ovsjanikov; coordinator of the occurrence: Mathieu Desbrun; the sheet’s teaching-design team lists Mathieu Desbrun, Emilien Ganier, Pooran Memari (LIX, École Polytechnique) and Maks Ovsjanikov · 36 h of in-person classes (lecture / lab split not displayed) · 4.5 ECTS · representing, sampling, reconstructing and analyzing 3D shapes: Bézier curves and splines, meshes and half-edges, Voronoi and Delaunay, surface reconstruction, smoothing, simplification, discrete curvature, spectrum and topology — the geometric foundations of the M2 Geometric Deep Learning. |
| Period | Autumn 2026 · period 1 (X-3A-P1, from 17/09/2026 to 18/12/2026) · course taught in English |
| Assessment | Lab assignments turned in during the semester and quizzes — no written exam; oral resit if necessary (stated in the sections of the engineering degree and of the exchange programs; the LLGA section of the sheet is empty) |
| Status in the program | P1 electiveAI-systems route one of the “Choose 3” electives of Year 1 · Period 1, preselected by the AI-systems route of the home page |
Audience: a data or 3D engineer who has handled points or a mesh and wants reliable tools for sampling, smoothing and comparing shapes. Empirical first: each topic starts from a failure you can observe — a poorly normalized LiDAR cloud that gives a leaky reconstruction, a badly discretized Laplacian whose smoothing melts the corners — and only then names the notions that fix it: half-edges, curvature, spectral signatures.
The module lays the discrete geometric foundations that Geometric Deep Learning (M2) builds on.
What you will be able to do
- Represent surfaces with meshes and manipulate the half-edge structure that encodes them.
- Generate smooth 2D curves — interpolation, splines, Hermite, Bézier — and evaluate them with the de Casteljau algorithm.
- Build Voronoi diagrams and Delaunay triangulations, and move from one to the other by duality.
- Reconstruct a continuous surface from a point cloud, with sampling guarantees.
- Smooth a mesh with the discrete Laplacian — from the uniform Laplacian to cotangent weights — while preserving details.
- Simplify and remesh a surface without denaturing its geometry.
- Compute discrete curvatures and verify the Gauss–Bonnet relation on real meshes.
- Use the spectrum of a shape (eigenvalues of the Laplacian) as a signature to compare it with others.
- Read the topological invariants of a shape: Euler characteristic, Betti numbers, persistence.
Official objectives and syllabus (2026-2027 catalog)
The official description announces the project: “this course will introduce the fundamental concepts of computer-based shape creation and analysis”, starting with “generating and representing smooth curves in 2D using splines and Bézier curves”, then the 3D representation techniques — with the emphasis on “triangular meshes and the associated methods” — and, in parallel, shape analysis methods up to “the definition and the computation of the similarity between shapes and shape correspondences”.
These materials follow exactly this arc, from 2D curves to non-rigid correspondences. Official prerequisites: not displayed; the assessment rests on the lab assignments turned in and the quizzes, with no written exam (an oral resit if necessary). The table follows the “Programme détaillé” of the sheet, in its order.
| Official syllabus topic | Course section |
|---|---|
| Polynomial, spline and Hermite interpolation for 2D curves | Chapter 1, def. 1.5 |
| Bézier curves and the Casteljau subdivision algorithm | Chapter 1, def. 1.6 |
| Triangular meshes and surface subdivision | Chapter 1 (meshes, half-edges) and chapter 6, def. 6.5 (Loop subdivision, Catmull–Clark) |
| Point-cloud representation and processing algorithms | Chapter 1 (def. 1.1), chapters 2–3 (Voronoi, Delaunay), chapter 4 (def. 4.1 sampling; section Processing point clouds: def. 4.7 k-NN, PCA normals and their orientation, outlier removal, example 4.8) |
| Reconstruction of a shape from point-cloud data | Chapter 4 (alpha-shapes, marching cubes, Crust, Poisson) |
| Shape processing and analysis: simplification, segmentation, curvature, feature detection | Chapter 6 (simplification, QEM), chapter 8 section Spectral segmentation (def. 8.5 Fiedler vector, example 8.6), chapter 7 (discrete curvature; section Feature detection, def. 7.5 and example 7.6), chapter 5 (smoothing) |
| Rigid registration | Chapter 4, def. 4.6 (ICP) |
| Shape recognition, non-rigid matching and non-rigid correspondence | Chapter 8 (spectrum and ShapeDNA, heat-kernel signatures, def. 8.4: non-rigid matching, functional maps by least squares, Gromov–Hausdorff as a preview) |
| Description: similarity between shapes and shape correspondences, “in parallel” with representation | Chapters 4 (ICP), 7 (feature points) and 8 (signatures and correspondences) |
The 2D curves (def. 1.5–1.6), surface subdivision (def. 6.5), rigid registration (def. 4.6) and non-rigid correspondences (def. 8.4) were added earlier; against the 2026-2027 sheet, point-cloud processing (def. 4.7), feature detection (def. 7.5) and spectral segmentation (def. 8.5), until then only named in passing, were added: all official topics are now covered. Our extensions, beyond the official syllabus: the refresher chapter 0, the geometric signal processing of chapter 5 (smoothing operators beyond what is asked), the combinatorial topology of chapter 9 (Euler, Betti, persistence — a bridge to the TDA module) and chapter 10 (research of the course instructors).
Where this course fits in the program
Module of period 1 of M1 (36 h, 4.5 ECTS), one of the “Choose 3” electives of Period 1 and preselected by the AI-systems route of the home page (signal, vision, 3D shapes): a geometric specialization choice particularly relevant if you are aiming for 3D data, image synthesis or learning on shapes.
- Prerequisites — official: not communicated on the course description. Internally: the programming fluency of the Refresher in Computer Science and foundations in linear algebra; the refresher chapter covers convexity, least squares and eigenvalues, the three recurring tools of the course.
- Downstream modules — the Laplacian and the spectrum of shapes studied here are at the heart of Analysis and Deep Learning on Geometric Data (M2), which generalizes neural networks to surfaces and graphs; the representation of meshes also serves Image Synthesis: Theory and Practice in P2 for surface rendering.
Course outline
- Refresher: convexity, least squares, eigenvalues — the three algebraic pillars reactivated before tackling geometry.
- Representing a shape: meshes and half-edges — first the smooth 2D curves (interpolation, splines, Bézier, de Casteljau), then the fundamental data structure of discrete surfaces.
- Voronoi diagrams and duality — partitioning space by nearest neighbor, and what duality says about it.
- Delaunay triangulations: the empty circle criterion — the canonical triangulation and its properties.
- Sampling and reconstruction of surfaces — from point cloud to surface, with guarantees — not forgetting rigid registration (ICP), which aligns the acquisitions.
- Smoothing: from uniform to cotangent Laplacian — the central operator of all shape analysis.
- Simplification and remeshing — reducing the number of elements while preserving geometry, or on the contrary refining by surface subdivision.
- Discrete curvature and Gauss–Bonnet — measuring curvature on a polyhedral object, and the theorem that ties it all together.
- The spectrum of shapes — the eigenvalues of the Laplacian as a shape’s fingerprint, up to non-rigid correspondences.
- Combinatorial topology: Euler, Betti, persistence — Euler’s formula, a recall of the Betti numbers and persistence taught in the TDA module, and the alpha filtration that a point cloud carries.
- Course research notes (Desbrun, Memari) — the research work of Desbrun and Memari related to the course; the functional maps of chapter 8 come from the work of the other coordinator, Maks Ovsjanikov.
- Exercises, Projects and assessment and References — systematic training, project subjects with a sample exam and a rubric, and sources to go further.
Session plan
36 h in class = 12 sessions of 3 h. The volume is the one of the SynapseS 2026–2027 sheet (36 h in person, no lecture / lab split displayed); the sheet lists its programme but publishes no session-by-session plan, so the split below is our proposal for covering these notes in that time; it follows the order of the sheet’s programme except that Voronoi and Delaunay (ch. 2–3) are taught before reconstruction, which needs them.
Level 1 = foundations (refreshers, representations, first worked examples), 2 = core algorithms and their proofs, 3 = advanced material (spectral analysis, persistence); the level never goes down from one session to the next.
Two topics are recalled rather than re-taught: homology and persistence, taught in Topological Data Analysis ch. 3–4, and the proofs of the spectral invariances, given in Geometric Data (Year 2). The time saved goes to the two labs of sessions 10 and 12.
| Session | Hours | Level | Content | Practice |
|---|---|---|---|---|
| 1 | 3 h | 1 | ch. 0 Refresher: convexity, least squares, eigenvalues; ch. 1 Representations, clean meshes, half-edges (Def. 1.1–Example 1.4) | lab: a half-edge structure and the V - E + F check |
| 2 | 3 h | 1 | ch. 1 (end) Smooth 2D curves: polynomial, Hermite and spline interpolation, Bézier and de Casteljau | lab: de Casteljau evaluation and subdivision |
| 3 | 3 h | 1 | ch. 2 Voronoi diagrams: cells, properties, complexity, Lloyd relaxation | Ex. 1, Ex. 7 |
| 4 | 3 h | 2 | ch. 3 Delaunay triangulations: empty circle, flips, max-min angle (Def. 3.1–Theorem 3.3) | Ex. 6 |
| 5 | 3 h | 2 | ch. 3 (end) Lifting onto the paraboloid, Bowyer–Watson, constrained Delaunay | Ex. 2 |
| 6 | 3 h | 2 | ch. 4 Sampling, approximation error, alpha-shapes, marching cubes (Def. 4.1–Example 4.5) | lab: marching cubes on an SDF |
| 7 | 3 h | 2 | ch. 4 (end) Reconstruction (Crust, Poisson), rigid registration (ICP), point-cloud processing: k-NN, PCA normals and orientation, outliers (Def. 4.7, Example 4.8) | lab: estimate normals, align two scans, then reconstruct |
| 8 | 3 h | 2 | ch. 5 Smoothing: uniform Laplacian, shrinking, Taubin, cotangent Laplacian | Ex. 3 |
| 9 | 3 h | 2 | ch. 6 Simplification (QEM), remeshing, subdivision | Ex. 4 |
| 10 | 3 h | 2 | ch. 7 Discrete curvature and Gauss–Bonnet (≈ 1.5 h); feature detection: sharp edges, corners, feature points (Def. 7.5, Example 7.6) (≈ 1.5 h) | Ex. 5; lab: feature detection on a noisy mesh (Lab 7.7) |
| 11 | 3 h | 3 | ch. 8 The spectrum of shapes: Laplace–Beltrami, ShapeDNA, heat kernel, recognition and functional maps (Def. 8.1–8.4) | Ex. 8, Ex. 9 |
| 12 | 3 h | 3 | ch. 8 (end) Spectral segmentation (Def. 8.5, Example 8.6) (≈ 1.5 h); ch. 9 Euler–Poincaré, recall of homology and persistence, the alpha filtration of a point cloud (≈ 1.5 h) | lab: spectral segmentation (Lab 8.7); Ex. 10 |
Self-study, outside the 36 h (about 1.5 h in total): ch. 10 Course research notes (Desbrun, Memari) — discrete exterior calculus and geometric tomography, read as an opening toward internships and the M2 (≈ 1.5 h).
How to study this module
- Work through the refresher chapter seriously, even if it seems easy: least squares and eigenvalues come back in half of the course.
- Draw! Voronoi, Delaunay and duality are understood with pencil and paper on small 2D examples before being coded.
- Implement the half-edge structure yourself once: you will durably understand what a mesh is.
- For each operator (smoothing, curvature), test on a sphere then on a real shape: the cases where theory is exact serve as unit tests.
- Connect every concept to the Laplacian: smoothing, spectrum, and later the spectral filters of GNNs are the same object seen from different angles.
- Redo the exercises of each section before moving on to the next; they build the reflexes used in the graded assignments.
Independent note A mesh is a graph: the discrete Laplacian you manipulate here is the direct cousin of the graph Laplacian of the spectral filters of the Graph Machine and Deep Learning for Generative AI module. This module is thus the royal road toward Analysis and Deep Learning on Geometric Data (M2) and toward careers in 3D data — industry, imaging, synthesis — as well as toward research in digital geometry of the LIX team.
0. Refresher: convexity, least squares, eigenvalues
This chapter reactivates the three algebraic tools that the geometric chapters use constantly — convex hulls, least squares and the spectral theorem — and shows on one example how convex hulls, Voronoi diagrams and Delaunay triangulations are three faces of the same object.
Notation. This page follows the site-wide notation conventions, without deviations. On a mesh graph, A is the adjacency matrix and D the degree matrix, with L = D - A. The cotangent stiffness matrix is L_c and the mass matrix is M (ch. 5, 8). Laplacian eigenvalues are sorted in increasing order and numbered from 1, and the mean-curvature normal follows \Delta x = -2H\mathbf{n} with the outward normal (ch. 7).
L3 prerequisites mobilized
- Convex hull: convex hull of P = smallest convex set containing P, described as the set of barycenters \sum_i \lambda_i p_i, \lambda_i \geq 0, \sum \lambda_i = 1; its faces are obtained by linear programs — chapter 3 uses it via the paraboloid lift;
- Least squares: minimizing \|Bx - y\|^2 is equivalent to the normal equations B^\top\!B x = B^\top y; geometric interpretation: orthogonal projection onto the image of B — used in chapter 6 (quadrics), in reconstruction (chapter 4) and for functional maps (chapter 8);
- Eigenvalues and eigenvectors: a real symmetric matrix S is diagonalizable in an orthonormal basis; quadratic forms x^\top S x and their constrained minimization — the heart of chapter 8 (spectrum);
- Fourier series on [0, 2\pi]: orthogonality of sines/exponentials — the smoothing of chapter 5 is understood as low-pass filtering mode by mode;
- A bit of topology: homeomorphism, connected components, “number of holes” — formalized in chapter 9 by the Euler characteristic and homology.
Proposition 0.1 — Three objects, one duality For a finite point set P \subset \mathbb{R}^2 in general position, the following objects define one another:
- the convex hull \mathrm{conv}(P) (faces = “extreme” points);
- the Voronoi diagram (cells of nearest points, chapter 2);
- the Delaunay triangulation (triangles with empty circumcircles, chapter 3).
Theorem 3.4 will show that the Delaunay is the image of the lower part of the convex hull of the points lifted onto the paraboloid — duality becomes a theorem of elementary linear algebra (a plane cuts a parabola).
1. Representing a shape: meshes and half-edges
Concrete scene: a 3D reconstruction pipeline that “works” in the lab and fails as soon as the density of the cloud changes. Before any algorithm, one must decide how a shape is stored in memory; this chapter compares the possible representations, then studies the two that the course uses most: triangle meshes, with their half-edge structure, and smooth 2D curves.
What breaks Three classic mistakes: confusing a point cloud, a mesh and a volumetric grid (they support different operations); forgetting the normals, without which inside and outside cannot be told apart; and smoothing without protecting the sharp edges.
Definition 1.1 — Four families of representations
- Explicit — point cloud: \{p_i\}_{i=1}^n \subset \mathbb{R}^3, the natural output of sensors (LiDAR, depth); no connections, no reliable normals;
- Explicit — mesh: vertices V, edges E, faces F (most often triangles); this is the lingua franca of rendering;
- Implicit: the shape is \{x : f(x) = 0\} for a scalar field f (SDF, potential, indicator); union/intersection trivial, sampling non-trivial (chapter 4);
- Volumetric / parametric: voxels (grids) and parametric surfaces u \mapsto x(u, v) — NURBS patches of modelers, chart atlases of remeshing (chapter 6).
Definition 1.2 — Clean meshes (manifold, watertight, orientable) A triangulated mesh is a manifold surface if: (i) each edge is shared by at most 2 faces; (ii) the faces around each vertex form a single cycle (the “umbrella”). It is watertight (closed) if each edge has exactly 2 faces — it then bounds a volume; orientable if the face normals can be chosen consistently (any watertight mesh embedded without self-intersection is). These properties are prerequisites for the operators of chapters 5 to 9; real clouds violate them — hence chapter 4.
Proposition 1.3 — The half-edge structure The half-edge data structure orients each edge into two half-edges (u \to v) and (v \to u) and stores, for each half-edge h:
- its opposite (\mathrm{opp}(h)),
- the face to its left (\mathrm{face}(h)),
- the next half-edge of that face (\mathrm{next}(h))
- and its origin vertex (\mathrm{org}(h)).
Then:
- the tour of a face is obtained by following \mathrm{next}; the tour of a vertex (its umbrella) by iterating h \mapsto \mathrm{next}(\mathrm{opp}(h)) on the half-edges leaving it;
- the 1-ring neighborhood of a vertex — the basis of smoothing (ch. 5), curvature (ch. 7) and the convolutions of Geometric Deep Learning — is traversed in O(\deg);
- memory cost: 2 half-edges per edge × 4 references ≈ 32 bytes per edge with 32-bit indices — versus about 8 bytes per edge for the raw “faces” table (3 indices per triangle, and F \approx 2E/3 on a closed mesh); this is the price of constant-time neighbor traversal.
Example 1.4 — The tetrahedron in tables V = 4, E = 6, F = 4.
- Face tables: (0,1,2), (0,3,1), (1,3,2), (2,3,0) — checking the orientation: the normal (p_1 - p_0) \times (p_2 - p_0) points outward for each face.
- Half-edges: 12 in total, each pair (i,j)/(j,i) matched.
- Euler characteristic: V - E + F = 4 - 6 + 4 = 2 = 2 - 2g \;\Longrightarrow\; \text{genus } g = 0, the tetrahedron is topologically a sphere (chapter 9).
Lab reflex: after every mesh load, check V - E + F, edges with 1 face (boundaries) and with 3+ faces (non-manifold) — two lines with hash tables.
On the right side of the boundary In industrial practice (CGAL, libigl, OpenMesh), one distinguishes the combinatorial mesh (tables, half-edges) from the geometric mesh (3D positions); two isomorphic meshes share the whole theory of chapters 5–9, independently of the positions. The algorithms of this module are first written on the combinatorics (topology), then embedded in the positions — just as graph algorithms run on the adjacency structure alone, with no coordinates at all (adjacency lists, matrix and CSR in Refresher in Computer Science, section 7.1).
Definition 1.5 — Smooth 2D curves: polynomial, Hermite and spline interpolation Before surfaces, parametric curves t \mapsto c(t) \in \mathbb{R}^2: this is how one draws on a machine (fonts, outlines, tool trajectories). Three ways of generating them from data:
- Polynomial interpolation: through n+1 points passes a unique polynomial of degree \leq n (Lagrange). But beyond a few points, the Runge phenomenon makes the polynomial oscillate between the nodes: one only uses it piecewise;
- Hermite interpolation: one imposes at each node a position and a tangent — the piecewise cubic Hermite H(t) = h_{00}(t)\,p_0 + h_{10}(t)\,m_0 + h_{01}(t)\,p_1 + h_{11}(t)\,m_1 (basis polynomials h of degree 3) joins the points with the desired tangents: the control that keyframing exploits in animation;
- Splines: piecewise polynomials of degree k, joined with k-1 continuous derivatives at the nodes. The natural cubic spline minimizes \int \|c''(t)\|^2 \mathrm{d}t among interpolating curves — the bending energy of a drafting spline (the word comes from there); its computation reduces to a tridiagonal system, and B-splines provide the locally supported basis — of which the NURBS of definition 1.1 are the rational generalization to surfaces.
Definition 1.6 — Bézier curves and the de Casteljau algorithm A Bézier curve of degree n is carried by control points b_0, \dots, b_n via the Bernstein polynomials: c(t) \;=\; \sum_{i=0}^{n} B_i^n(t)\, b_i, \qquad B_i^n(t) = \binom{n}{i} t^i (1-t)^{n-i}, \;\; t \in [0,1]. Properties: c(0) = b_0, c(1) = b_n, end tangents n(b_1 - b_0) and n(b_n - b_{n-1}), and the curve lives in the convex hull of its control points (the B_i^n form a partition of unity) — hence the “handle” control of drawing software.
The de Casteljau algorithm evaluates c(t) by successive linear interpolations b_i^{r} = (1-t)\,b_i^{r-1} + t\,b_{i+1}^{r-1} up to b_0^n = c(t): numerically stable (no subtraction of large terms, unlike the expanded Bernstein form), it also produces the subdivision at the point t — the intermediate points b_0^0, \dots, b_0^n and b_0^n, \dots, b_n^n form two control sets whose two Bézier curves rejoin exactly at c(t).
This iterated refinement is the template of the subdivision surfaces of chapter 6 (def. 6.5) and the natural bridge to the curves of the animation modules.
2. Voronoi diagrams and duality
Given a set of sites — sensors, shops, sample points of a surface — which site is closest to each point of space? The Voronoi diagram answers this question once and for all by cutting space into cells; this chapter defines it, proves its basic properties and computes a small example by hand.
Definition 2.1 — Voronoi cell For a finite set of sites P = \{p_1, \dots, p_n\} \subset \mathbb{R}^d, the Voronoi cell of p_i is \mathcal{V}(p_i) = \big\{\, x \in \mathbb{R}^d \;:\; \|x - p_i\| \leq \|x - p_j\| \ \ \forall j \,\big\} = \bigcap_{j \neq i} H_{ij}, where H_{ij} is the half-space of points closer to p_i than to p_j (delimited by the perpendicular bisector plane of [p_i, p_j]).
The Voronoi diagram \mathrm{Vor}(P) is the partition \bigcup_i \mathcal{V}(p_i).
Proposition 2.2 — Three immediate properties (i) Each cell is a convex polytope (finite intersection of half-spaces). (ii) The cells with non-empty interior form a partition of space; every boundary point is at equal distance from at least two sites. (iii) A Voronoi vertex (point where d+1 cells meet in general position) is the center of a sphere passing through these d+1 sites and containing no other site in its interior.
Proof. (i) By the very definition, as the intersection of the H_{ij}.
(ii) For every x, the set of nearest sites is non-empty; x is interior to its cell if it is strictly closer to a single site.
(iii) A vertex v belongs to the cells of p_{i_0}, \dots, p_{i_d} (exactly d+1 in general position): \|v - p_{i_k}\| = \rho \quad \text{for all } k, hence v is the center of a sphere of radius \rho passing through these sites.
If a site p_j were at distance < \rho from v, then v would be strictly closer to p_j than to p_{i_0}, so it would not belong to the cell of that site — a contradiction. ∎
Definition 2.3 — Complexity In dimension 2, a diagram of n sites has at most 2n - 5 vertices and 3n - 6 edges (planar — Euler’s formula). In dimension d, the worst-case complexity is \Theta\big(n^{\lceil d/2 \rceil}\big), already quadratic in dimension 3, since \lceil 3/2 \rceil = 2: a 3D Voronoi diagram, or its Delaunay tetrahedralization, can have \Theta(n^2) elements. High-dimensional Voronoi diagrams are therefore expensive explicit objects, manipulated via their dual graphs (chapter 3) or by queries (kd-trees).
Example 2.4 — Three sites, complete computation Sites p_1 = (0,0), p_2 = (4,0), p_3 = (0,3).
- Perpendicular bisectors: for [p_1 p_2]: x = 2; for [p_1 p_3]: y = 1.5; for [p_2 p_3]: \|x - p_2\|^2 = \|x - p_3\|^2 \quad \text{gives} \quad 8x - 6y = 7.
- The Voronoi vertex is the circumcenter of the triangle: intersection of x = 2 and y = 1.5, that is (2,\, 1.5), at distance r = \sqrt{2^2 + 1.5^2} = 2.5 from the three sites — verified: \|(2,1.5) - (4,0)\| = \|(2,1.5) - (0,3)\| = 2.5 ✓.
- The Voronoi edge between \mathcal{V}(p_1) and \mathcal{V}(p_2) is the ray of x = 2 starting from (2, 1.5) downward.
The whole geometry of the chapter is already there: perpendicular bisectors, circumcircle, triangle/vertex duality.
Immediate applications The Voronoi diagram answers the nearest neighbor query by cell location; in robotics, the path “farthest from obstacles” follows the medial axis (Voronoi edges); in imaging, segmentation by Voronoi diagram of markers (these are the dual watersheds); Voronoi tessellations sample textures; and the generalization \mathcal{V}_S(p) = \{x : d(x, p) \leq d(x, S)\} (diagrams of complex sites — segments, disks) drives manufacturing robotics.
import numpy as np
from scipy.spatial import Voronoi, Delaunay
rng = np.random.default_rng(0)
P = rng.uniform(0, 1, (60, 2))
vor = Voronoi(P) # Voronoi diagram
dela = Delaunay(P) # dual triangulation
# --- numerical verification of the empty circle criterion (chapter 3) ---
def circumcenter(a, b, c):
d = 2 * (a[0]*(b[1]-c[1]) + b[0]*(c[1]-a[1]) + c[0]*(a[1]-b[1]))
ux = ((a[0]**2+a[1]**2)*(b[1]-c[1]) + (b[0]**2+b[1]**2)*(c[1]-a[1])
+ (c[0]**2+c[1]**2)*(a[1]-b[1])) / d
uy = ((a[0]**2+a[1]**2)*(c[0]-b[0]) + (b[0]**2+b[1]**2)*(a[0]-c[0])
+ (c[0]**2+c[1]**2)*(b[0]-a[0])) / d
return np.array([ux, uy])
worst = np.inf
for tri in dela.simplices: # for each Delaunay triangle
a, b, c = P[tri]
o = circumcenter(a, b, c); r = np.linalg.norm(a - o)
dmin = min(np.linalg.norm(P[j] - o) for j in range(len(P))
if j not in tri)
worst = min(worst, dmin - r) # must remain >= 0 (margin)
print("minimal empty circle margin:", round(worst, 6)) # ~1e-2 or more
# --- Lloyd relaxation: toward a centroidal diagram ---
for _ in range(20):
vor = Voronoi(P)
for i, reg in enumerate(vor.point_region): # cell of site i
r_idx = vor.regions[reg]
if r_idx and -1 not in r_idx: # skip unbounded cells
poly = vor.vertices[r_idx]
c = poly.mean(axis=0) # approx. of the cell centroid
P[i] = 0.8 * P[i] + 0.2 * c # damped displacement
# result: sites almost coincident with the centroids of their cells3. Delaunay triangulations: the empty circle criterion
A point set can be triangulated in many ways, and most of them contain long, flat triangles that ruin interpolation and simulation. This chapter characterizes the best one, the Delaunay triangulation, by an empty-circle criterion, proves that it maximizes the smallest angle, and gives an algorithm to build it.
Definition 3.1 — Delaunay triangulation A triangulation T of P (maximal for edge inclusion) is Delaunay if for each triangle abc \in T, the open circumdisk contains no point of P:
Key result — the empty circle criterion \forall\, abc \in T,\quad \mathrm{disk}(a, b, c) \cap P = \varnothing \qquad \text{(empty circle criterion)}.
In dimension d, “triangle” is replaced by a simplex of dimension d and “disk” by ball.
If P is in general position (no 4 cocircular points), the Delaunay is unique — it is the dual graph of the Voronoi diagram: one Voronoi vertex per triangle, one Voronoi edge per Delaunay edge.
Theorem 3.2 — Local criterion by angles (flip lemma) Let a b c d be a strictly convex quadrilateral triangulated by the diagonal ac (triangles abc and acd). Then: d \in \mathrm{disk}(a, b, c) \iff \angle abc + \angle adc > \pi.
In that case, the circumcircles of abc and acd contain d and b respectively (violations of the criterion), and the flip (replacing ac by bd) locally restores the criterion and strictly increases the smallest of the quadrilateral’s six angles.
Proof. (i) Cocircular criterion. Let \Gamma denote the circumcircle of a, b, c.
By the inscribed angle theorem, every point of \Gamma on the side of the line (ac) opposite to b sees the chord [ac] under the same angle \pi - \angle abc (opposite angles of a cyclic quadrilateral are supplementary).
On that side of (ac), a point strictly inside the disk sees [ac] under a larger angle, and a point outside under a smaller one. Hence d \in \mathrm{disk}(a, b, c) \iff \angle adc > \pi - \angle abc, \quad \text{that is} \quad \angle abc + \angle adc > \pi.
(ii) Symmetry. By exchanging the roles (b seen from triangle acd), the same inequality shows that b is in the circumdisk of acd exactly in the same case: the two violations go together.
(iii) Angles. The four “flank” angles of the quadrilateral (at the vertices, off the diagonal) all reappear, unchanged, in one or the other of the triangulations.
Before the flip, the angles opposite the diagonal are \angle abc and \angle adc, of sum > \pi (hence one of the two > \pi/2).
After the flip, they are \angle bad and \angle bcd, of sum < \pi.
By applying point (i) to the two new pairs of triangles, each of the six angles of the new triangulation is strictly larger than the smallest of the angles opposite the old diagonal — hence the increase of the minimum. ∎
Theorem 3.3 — The Delaunay maximizes the smallest angle Among all triangulations of P, the Delaunay triangulation (unique in general position) is the one that maximizes the vector of angles sorted in increasing order, for the lexicographic order — in particular its smallest angle is maximal. This is what makes it indispensable in scientific computing: avoiding “flattened” triangles (large conditioning numbers for finite elements, chapter 5).
Proof. (Complete sketch.) Start from an arbitrary triangulation and apply the flips of Theorem 3.2 as long as an empty circle violation exists. Each flip strictly increases the sorted angle vector (Theorem 3.2); there are only finitely many triangulations, so the process stops on a triangulation without violation: it is Delaunay (local criterion ⟹ global: a triangulation in which every edge satisfies the local criterion is the Delaunay triangulation). Conversely, a triangulation that maximizes the sorted angle vector can contain no violating edge, since flipping that edge would increase the vector; it is therefore locally Delaunay, hence the Delaunay triangulation. ∎
Theorem 3.4 — Lifting onto the paraboloid: Delaunay = lower convex hull Via the lift \ell(x, y) = (x, y, x^2 + y^2), a triangle abc of P has its circumcircle empty if and only if the facet \ell(a)\ell(b)\ell(c) belongs to the lower convex hull of the lifted points. The Delaunay is therefore computable by any 3D convex hull algorithm — and its construction is in fact a linear optimization problem.
Proof. Let c be the center and r the radius of the circumcircle of abc. For any point p of the plane, \|p - c\|^2 = r^2 rewrites as x_p^2 + y_p^2 = 2 c \cdot p + (r^2 - \|c\|^2), that is to say: the lifted point \ell(p) is on the plane \Pi : z = 2c_x x + 2c_y y + (r^2 - \|c\|^2) exactly when p is on the circle, above (z > \Pi(p)) exactly when \|p - c\| > r (exterior of the disk), below exactly when p is in the open disk.
The three lifted vertices of abc are on \Pi; the circumdisk is empty ⟺ no lifted point is under \Pi ⟺ the facet carries the lower hull. ∎
Definition 3.5 — The Bowyer–Watson algorithm Incremental insertion: starting from the Delaunay of a large enclosing triangle, insert p:
- find the triangle containing it;
- collect the “cavity” of triangles whose circumcircle contains p (it is connected and star-shaped with respect to p);
- remove it and retriangulate the holed polygon by the edges from p to the boundary vertices of the cavity.
Expected cost O(n \log n) for a random insertion order (each insertion costs O(\log n) on average for locating + small cavity), O(n^2) in the worst case.
The test “circumcircle contains p” is done in exact arithmetic by the incircle determinant \mathrm{det}\begin{pmatrix} a_x & a_y & a_x^2 + a_y^2 & 1 \\ \vdots & \vdots & \vdots & \vdots \\ p_x & p_y & p_x^2 + p_y^2 & 1 \end{pmatrix} \qquad (\text{rows } a, b, c, p). For a, b, c in counterclockwise order, positive sign ⟺ p in the disk (it is the “under the plane” test of Theorem 3.4!).
Constraints and higher dimensions To force given edges (part boundaries, faults), the constrained Delaunay (CDT) reintroduces the required edges then flips without violating the constraints; the standard for finite element meshing (with Ruppert refinement to bound the angles). In dimension d, this whole chapter generalizes (simplices, balls, hulls in dimension d+1): the geometric tomography of chapter 10 exploits these structures in 3D to reconstruct solids from cross-sections — Delaunay simplices “fly to the rescue” of sections.
4. Sampling and reconstruction of surfaces
A scanner returns points, not a surface. This chapter asks when a set of points carries enough information to recover the surface it was sampled from, and presents the main ways of rebuilding a mesh from it — after aligning the separate scans with ICP.
Definition 4.1 — Sampling a surface: density and spacing For a compact surface S, a set P \subset S is an \varepsilon-sample if every point of S is at distance < \varepsilon from P.
One takes \varepsilon small compared to the reach (distance to the Medial Axis; it encodes both curvature and thickness).
“Poisson-disk” sampling (no pair of points closer than \delta, every point covered within \delta') is the implicit model of scanners; the Lloyd relaxation (code of chapter 2) pushes a cloud toward this quasi-uniform structure.
Proposition 4.2 — Linear approximation error For a surface whose principal curvatures are bounded by \kappa in absolute value, locally replacing S by the tangent plane — or by a chord of length \ell — creates an error (sagitta) of at most, to leading order, \frac{\ell^2 \kappa}{8}, with equality on a sphere of radius 1/\kappa, and never more than twice that value (for \ell \leq 2/\kappa).
A sphere of radius 1 sampled with mesh size 0.1 is therefore approximated to within about \frac{0.01}{8} = 1.25 \times 10^{-3} (exactly 1.2508 \times 10^{-3}) — the error decreases quadratically with the mesh size: halving the mesh size divides the error by 4.
Proof. A chord of length \ell \leq 2r of a circle of radius r = 1/\kappa is at distance (sagitta) f = r - \sqrt{r^2 - (\ell/2)^2} from the arc. Expansion for small \ell/r: f = \frac{\ell^2}{8r} + \frac{\ell^4}{128\,r^3} + O(\ell^6/r^5). Write f = r\big(1 - \sqrt{1 - u}\big) with u = \ell^2/(4r^2) \in [0, 1]. Since 1 - u \leq \sqrt{1 - u} \leq 1 - u/2, the sagitta lies between the leading term and twice it: \frac{\ell^2}{8r} \;\leq\; f \;\leq\; \frac{\ell^2}{4r}. The leading term is thus a lower bound, accurate when \ell \ll r. ∎
Definition 4.3 — Alpha-shapes: filtering the Delaunay by distance The alpha-complex \mathcal{C}_\alpha of P is the subcomplex of the Delaunay formed by the simplices whose circumcircle (empty portion) has radius \leq \alpha; the alpha-shape is its surface. As \alpha grows from 0 to infinity, the family (\mathcal{C}_\alpha)_\alpha forms a filtration — each complex contained in the next — which gradually grows the details of the cloud: this is the geometric version of a multi-scale analysis (and the key ingredient of persistence, chapter 9, where Definition 9.2 gives the exact value at which each simplex enters).
Definition 4.4 — Marching cubes: polygonizing an implicit field To extract the isosurface f(x) = c of a field sampled on a grid (SDF, density potential, sign field), the marching cubes algorithm (Lorensen & Cline, 1987) walks over the cells: the 8 corners classified “inside/outside” give up to 256 configurations (reduced to 15 by symmetries); the edge/isosurface intersections are linearly interpolated (t = (f_0 - c)/(f_0 - f_1)); the triangles produced stitch a closed surface. It is the natural interface between implicit representations (Def. 1.1) and meshes (Def. 1.2) — and the historical tool of medical imaging.
Example 4.5 — A sphere in marching cubes, numbers SDF f(x) = |x| - 1 on [-1.2\,;\,1.2]^3, mesh size h: the polygonal surface stays within O(h^2) of the sphere (linear interpolation of a smooth field along each edge: error O(h^2) on f, divided by the gradient, of norm 1).
For h = 0.1: 24^3 = 13\,824 cells, of which about 1,870 are crossed by the sphere, each producing one to four triangles; the vertices placed by interpolation lie within 0.0011 of the sphere.
For h = 0.05: about 7,500 crossed cells — four times more, as the ratio area/h^2 predicts — and a vertex error of 0.0003, a ratio close to 4 consistent with Proposition 4.2.
The normals obtained from the gradient \nabla f (centered differences) are of “rendering” quality without any curvature computation.
Reconstruction: the global viewpoint The Crust of Amenta–Bern (1999) proves: a sufficiently fine \varepsilon-sample of the surface S + Voronoi/Delaunay = a reconstruction homeomorphic to S (topological guarantee).
The Poisson surface reconstruction (Kazhdan et al., 2006) changes paradigm: fit an “inside/outside” indicator function \chi whose gradient matches the oriented normals \nabla\chi \approx \mathbf{n}\,\delta_S — a Poisson problem \Delta \chi = \nabla \cdot (\mathbf{n}\,\delta_S) solved in multi-resolution; robust to holes and non-uniform data.
Recent approaches learn the SDF itself with a neural network (DeepSDF, Park et al., 2019), but the surface is still extracted by the marching cubes of Definition 4.4 and Example 4.5: the tool has not aged a bit.
Definition 4.6 — Rigid registration: the ICP algorithm Before reconstructing, one often has to align several acquisitions of the same object: this is rigid registration — seeking R \in SO(3) and t applied to the cloud P to fit it onto Q. The ICP algorithm (iterative closest point, Besl–McKay, 1992) alternates:
- match: each point of P to its nearest neighbor in Q (kd-tree);
- align: the optimal rigid transform in the least-squares sense on these pairs is solved exactly by singular value decomposition of the cross-covariance matrix (the Kabsch–Umeyama solution, implemented by the Computer Vision module);
- iterate until the residual converges.
Each step can only decrease the error, so the algorithm converges — but to a local minimum: initialization matters (a coarse alignment by hand, by GPS or by global descriptors), and robust variants reject outlier pairs (quantile distance), weight by normals or minimize the point-to-plane error. It is the universal tool of 3D scanning and cloud fusion — rigid only: non-rigid correspondence waits for chapter 8.
Processing point clouds: neighbourhoods, normals, outliers
The official programme pairs the point-cloud representation with its processing algorithms. Raw scans carry no connectivity, no normals and some outliers; three local operations, all built on nearest neighbours, turn them into the input that reconstruction (Poisson needs oriented normals) and registration expect.
Definition 4.7 — Neighbourhoods and PCA normals The k-nearest neighbours N_k(p) of a point (or the points within a radius r) are found with a kd-tree in O(\log n) expected time per query after an O(n \log n) construction.
The local covariance of p is C_p = \frac{1}{k}\sum_{q \in N_k(p)} (q - \bar q)(q - \bar q)^\top, with \bar q the mean of the neighbours; its eigenvalues \lambda_1 \geq \lambda_2 \geq \lambda_3 \geq 0 measure the spread along its orthonormal eigenvectors.
The normal estimate is the eigenvector of the smallest eigenvalue \lambda_3 — the direction in which the neighbourhood is thinnest, which minimizes \sum_q \big((q - \bar q)\cdot \mathbf{n}\big)^2 over unit vectors (chapter 0: constrained minimization of a quadratic form).
The surface variation \sigma(p) = \lambda_3/(\lambda_1 + \lambda_2 + \lambda_3) \in [0, \tfrac13] is 0 on a plane and grows at edges and corners.
The sign of the normal is not determined: it is made consistent by propagating an orientation along a minimum spanning tree of the neighbourhood graph, flipping \mathbf{n}_q when \mathbf{n}_p \cdot \mathbf{n}_q < 0 (Hoppe et al., 1992).
Outliers are removed statistically: compute each point’s mean distance to its k neighbours and discard the points whose value exceeds the mean over the cloud by more than two standard deviations.
Example 4.8 — A normal by hand The neighbourhood of a point is \{(1, 0, 0.1),\ (-1, 0, -0.1),\ (0, 1, 0),\ (0, -1, 0)\}, of mean 0. Its covariance is C = \frac14 \sum_q q\,q^\top = \begin{pmatrix} 0.5 & 0 & 0.05 \\ 0 & 0.5 & 0 \\ 0.05 & 0 & 0.005 \end{pmatrix}.
The y axis is an eigenvector of eigenvalue 0.5; the block in (x, z) has trace 0.505 and determinant 0.5 \times 0.005 - 0.05^2 = 0, so its eigenvalues are 0.505 and 0.
The eigenvector of \lambda_3 = 0 solves 0.5x + 0.05z = 0: \mathbf{n} = (-0.1, 0, 1)/\sqrt{1.01}, tilted by \arctan 0.1 \approx 5.7° from the vertical.
The four points lie exactly on the plane z = 0.1\,x, whose normal this is, and \sigma = 0 says so.
With noise, \lambda_3 > 0 and the estimate degrades as the noise approaches the neighbourhood radius — hence the choice of k: large enough to average the noise, small enough that the surface is still flat at that scale (Proposition 4.2).
5. Smoothing: from uniform to cotangent Laplacian
Scanned meshes are noisy, and the natural cure is to move each vertex toward the average of its neighbors. This chapter shows why this naive smoothing shrinks the shape, and how the cotangent Laplacian — the discrete version of the Laplace–Beltrami operator — gives a smoothing that respects the geometry.
Definition 5.1 — Combinatorial Laplacian and smoothing scheme On a closed mesh, the uniform (combinatorial) Laplacian of a vertex i with neighborhood \mathcal{N}(i) is \delta_i = \dfrac{1}{|\mathcal{N}(i)|}\sum_{j \in \mathcal{N}(i)} p_j - p_i, and Laplacian smoothing iterates p_i \leftarrow p_i + \lambda\,\delta_i, \qquad \lambda \in (0, 1]. Each step moves every vertex a fraction \lambda of the way toward the barycenter of its neighbors; the “mean curvature flow” version moves it along the normal instead: p_i \leftarrow p_i + \lambda\,H_i \mathbf{n}_i (chapter 7 for H_i).
In matrix form, with A the adjacency matrix and D the diagonal matrix of degrees: \mathbf{x} \leftarrow (I - \lambda L_{\mathrm{rw}})\,\mathbf{x} \quad \text{with} \quad L_{\mathrm{rw}} = I - D^{-1}A, the random-walk Laplacian: D^{-1}A averages over the neighbors. The combinatorial Laplacian is L = D - A = D\,L_{\mathrm{rw}}. The word “normalized” is kept, as in Graph ML and the notation page, for the symmetric L_{\mathrm{sym}} = I - D^{-1/2} A D^{-1/2}, which has the same eigenvalues as L_{\mathrm{rw}}.
Theorem 5.2 — Uniform smoothing shrinks: 1D spectral proof On a ring of n vertices (cycle) with positions x_i, the iteration x_i \leftarrow (1-\lambda)x_i + \lambda \bar{x}_{\mathcal{N}(i)} preserves the mean \bar{x} and makes every non-constant component decrease: x^{(k)} \to \bar{x}\mathbf{1} — the 1D mesh shrinks down to the barycenter.
The decay rate of a mode of frequency j \neq 0 is \rho_j = 1 - \lambda\big(1 - \cos\tfrac{2\pi j}{n}\big) \in [1 - 2\lambda, 1), so |\rho_j| < 1 for 0 < \lambda < 1.
Proof. Decompose x on the orthogonal basis of discrete Fourier modes u^{(j)}_m = e^{2\pi \mathrm{i}\, jm/n}, m = 0, \dots, n-1. The average of the two neighbors multiplies u^{(j)} by \frac{1}{2}(e^{2\pi\mathrm{i}\, j/n} + e^{-2\pi\mathrm{i}\, j/n}) = \cos\frac{2\pi j}{n}; hence the iteration multiplies mode j by (1-\lambda) + \lambda\cos\frac{2\pi j}{n}.
For j = 0 (constant): factor 1 — conservation of the mean.
For j \neq 0: \cos\frac{2\pi j}{n} < 1 gives \rho_j < 1, and \rho_j \geq 1 - 2\lambda > -1 for \lambda < 1: all non-constant modes decay geometrically.
For \lambda \leq \tfrac12 (where all \rho_j \geq 0) the high frequencies decay fastest. Limit = constant component = barycenter. ∎
Definition 5.3 — Remedies: Taubin λ|μ, cotangents
Taubin λ|μ: alternate a smoothing step (\lambda \approx 0.5) and an “unsmoothing” step (\mu \approx -0.53); the frequencies in the pass band (\rho_\mu, \rho_\lambda) are preserved — the mean volume is conserved instead of collapsing;
Cotangent (geometric) Laplacian: \delta_i = \frac{1}{2 A_i}\sum_{j \in \mathcal{N}(i)} \big(\cot \alpha_{ij} + \cot \beta_{ij}\big)\,(p_j - p_i), where \alpha_{ij}, \beta_{ij} are the angles opposite the edge (i,j) and A_i the mixed Voronoi area of the vertex — this is the operator converging to the Laplace–Beltrami operator.
It is the finite-element discretization with piecewise-linear hat functions: \psi_i is linear on each triangle, equal to 1 at vertex i and 0 at every other vertex, and the weights are w_{ij} = -\int_S \nabla\psi_i \cdot \nabla\psi_j \,\mathrm{d}A = \tfrac12\big(\cot\alpha_{ij} + \cot\beta_{ij}\big). In matrix form, \delta = -M^{-1}L_c\,\mathbf{x}: the cotangent stiffness matrix L_c has -w_{ij} off the diagonal and rows summing to zero (it is symmetric positive semi-definite on every mesh, as a finite-element stiffness matrix, even when obtuse angles make some weights negative), and the mass matrix M = \mathrm{diag}(A_i) holds the vertex areas. The derivation from the Dirichlet energy is the canonical one of Geometric Data, Derivation 2.2 (Year 2);
Filtering order: smoothing in position regularizes geometry; smoothing the normals then re-projecting (or shrink-and-grow) separates denoising from deformation — the two families coexist in DCCs.
Example 5.4 — Cotangents on isosceles right triangles Single triangle a = (0,0), b = (1,0), c = (0,1), vertex a (the right angle is at a).
Its two adjacent edges are (a,b) and (a,c); each is a boundary edge, so it has only one opposite angle: \angle acb = 45° for (a,b) and \angle abc = 45° for (a,c), both of cotangent 1.
The weighted sum is 1\cdot(b - a) + 1\cdot(c - a) = (1, 1): \delta_a \neq 0 and points into the triangle — boundary vertices are never “balanced”, which is why smoothing either fixes them or treats them by a separate rule.
Now make a an interior vertex: surround it by the four triangles with neighbors (1,0), (0,1), (-1,0), (0,-1). Each edge from a now has two opposite angles of 45°, hence weight \cot 45° + \cot 45° = 2, and \sum_j 2\,(p_j - a) = 2\,[(1,0) + (0,1) + (-1,0) + (0,-1)] = 0 : \qquad \delta_a = 0.
This is the planar test, the real implementation check: a planar mesh embedded in its plane has all interior \delta_i equal to zero (the discrete equivalent of \Delta x = 0 for the coordinate functions of a plane).
Summing by parts gives the discrete Green formula \sum_i A_i\, f_i\, \delta_i = -\sum_{(i,j)} w_{ij}(f_j - f_i)^2, \qquad \text{with} \quad w_{ij} = \tfrac12(\cot\alpha_{ij} + \cot\beta_{ij}). When all weights are positive, the operator is negative semi-definite, with equality if and only if f is constant on each component.
From smoothing to geometric deep learning The cotangent matrix is the central object of the M2 module Analysis and Deep Learning on Geometric Data: diffusion of descriptors (HKS), spectral convolutions (eigenfunction bases, chapter 8 below), DiffusionNet. The smoothing of this chapter is its “deterministic” version: same operator, without learned data — and already non-trivial: choice of area/mixed Voronoi, negative weights on obtuse meshes (to be truncated or regularized).
6. Simplification and remeshing
A scanned statue may have ten million triangles, while a game needs ten thousand. This chapter shows how to remove triangles while controlling the geometric error (quadric error metrics), how to make a mesh regular again (remeshing), and how to go the other way, from a coarse mesh to a smooth surface (subdivision).
Definition 6.1 — Quadric Error Metrics (QEM) To each vertex v one associates the set \mathcal{P}(v) of the planes of its incident faces; its error quadric is E(v) = \sum_{\pi \in \mathcal{P}(v)} \big(\mathbf{n}_\pi \cdot v - d_\pi\big)^2 = v^\top\!Q v + 2\,b^\top v + c, \qquad Q = \sum_{\pi} \mathbf{n}_\pi \mathbf{n}_\pi^\top,\ \ b = -\sum_\pi d_\pi \mathbf{n}_\pi,\ \ c = \sum_\pi d_\pi^2.
Edge contraction (u, v) \to \bar{v}: choose \bar{v} minimizing E_{u \oplus v} (the sum quadric), then merge.
The order of contractions follows increasing cost (priority queue): this is the Garland–Heckbert algorithm (1997), still the standard for game LODs.
Theorem 6.2 — Additivity of quadrics and algebraic optimum (i) E_{u \oplus v}(x) = E_u(x) + E_v(x) for every x — the quadrics add coefficient by coefficient (Q, b, c) = (Q_u + Q_v,\ b_u + b_v,\ c_u + c_v). (ii) If Q = Q_u + Q_v is invertible, the minimal cost of the contraction is attained at \bar{v} = -Q^{-1}b and equals c - b^\top Q^{-1} b.
Proof. (i) Each quadric is a sum of squares over sets of planes; merging the vertices merges the sets of planes (the incident faces become incident to the merged vertex), and the sum of sums is the sum over the union — hence the term-by-term additivity of the quadratic forms.
(ii) E(x) = x^\top Q x + 2b^\top x + c, Q symmetric positive definite: \nabla E = 2(Qx + b) = 0 gives x^\ast = -Q^{-1}b, and E(x^\ast) = c - b^\top Q^{-1}b (direct substitution). ∎
Example 6.3 — Two contractions with numbers
- 1D straight boundary: two vertices of a straight edge carry the planes x = 0 and x = 2 (unit normal (1,0,0), offsets 0 and 2); E(x) = x^2 + (x-2)^2 = 2(x-1)^2 + 2, minimal on the whole plane x = 1 at cost 2 — here Q = \mathrm{diag}(2, 0, 0) is singular, so one takes the best point of the segment [u, v], its midpoint: the contraction “glues” the two planes halfway;
- Cube corner: planes x=0, y=0, z=0 (unit normals). Q = I_3, b = 0, c = 0 ⟹ \bar{v} = (0,0,0), cost 0: contracting the three faces of a cube corner toward the exact corner costs nothing — this is the strength of QEM: detecting exact algebraic folds.
Definition 6.4 — Isotropic remeshing Transforming a mesh into a quasi-uniform mesh (edge lengths in [l_{\min}, l_{\max}], roughly equilateral triangles) by the loop:
- split of overly long edges (projected midpoint);
- collapse of overly short ones;
- edge flip restoring valence 6 (interior) / 4 (boundary);
- tangential smoothing (chapter 5, projected onto the tangent plane so as not to shrink the shape).
Result: a mesh suited to the simulations of the Computer Animation module and to the convolutions of the Geometric Deep Learning module.
Parameterization (chart atlas) is the alternative: cut into topological disks, flatten (Tutte/harmonic, ARAP), remesh in the parameter domain — higher quality, more delicate handling of cuts.
Errors on a budget In production, simplification is both judge and jury: the QEM quadric optimizes an algebraic error (distance to planes), not the Hausdorff distance to the original surface — boundaries and fine details require locks (preserved edges/attributes) and weighted boundary planes; for attributes (color, normals), one stacks quadrics of “planes” in higher dimension.
Rule of thumb: a 10:1 reduction ratio is almost invisible on screen on dense meshes — beyond that, steer by curvature fields (chapter 7) to decide where to keep the triangles.
Definition 6.5 — Surface subdivision Subdivision is the reverse path of simplification: start from a coarse control mesh and refine it iteratively by local rules, up to a smooth limit surface.
The Loop scheme (1987, triangular) cuts each triangle into four through the edge midpoints: each new edge vertex takes \tfrac38(v_i + v_j) + \tfrac18(v_a + v_b) (endpoints and the two opposite neighbors), each old vertex slides toward (1 - n\beta)\,v + \beta\sum_{\text{neighbors}} v_i with \beta depending on the valence n.
In the limit, on the regular part of the mesh (valence 6) the surface is a quartic box spline (a three-directional spline on the triangular grid), C^2 there, while at extraordinary vertices (valence \neq 6) it remains C^1. The Catmull–Clark scheme (1978) is its quadrilateral analogue: there the regular limit is a bicubic tensor-product B-spline, and the extraordinary vertices have valence \neq 4 — the standard of animated film, which the Computer Animation module meets on the rendering side.
Theory: these rules extend to surfaces the de Casteljau refinement of curves (def. 1.6); subdivision and simplification thus bracket the level of detail of a single shape, from the control mesh to the rendering mesh.
7. Discrete curvature and Gauss–Bonnet
Curvature tells a corner from a flat zone and a bump from a saddle, but its classical definition needs second derivatives, which a mesh does not have. This chapter defines curvature on a polyhedral surface through angles and cotangents, and proves that the discrete Gauss–Bonnet theorem holds exactly.
Definition 7.1 — Curvatures in the continuous setting, to set the targets At a point of a smooth surface, the principal directions have extreme normal curvatures \kappa_1, \kappa_2; Gaussian curvature K = \kappa_1 \kappa_2 (product); mean curvature H = \tfrac{\kappa_1 + \kappa_2}{2} (average); the shape operator satisfies H = \tfrac12 \mathrm{div}\, \mathbf{n} — hence the link with the Laplacian of chapter 5: \Delta x = -2H\mathbf{n}, with \Delta = \mathrm{div}\,\nabla and the outward normal \mathbf{n}, so that H > 0 on a sphere (on the unit sphere, \Delta x = -2x). This is the site-wide sign convention of the notation page, and the canonical statement is Geometric Data, ch. 1 (Year 2).
K is intrinsic (measurable “from within the surface”); H depends on the embedding — this distinction structures all of shape analysis.
Definition 7.2 — Angle deficit At vertex i of a triangulated mesh, the angle deficit is \mathcal{K}_i = 2\pi - \sum_{j}\,\theta_{ij}, the sum of the angles of the faces incident at i. It is the natural discretization of the Gaussian curvature integrated over the neighborhood: positive at tips (cone), zero on developable zones, negative at passes (saddle).
The discrete mean curvature comes from the same cotangent matrix as in chapter 5: \frac{1}{2 A_i} \sum_j (\cot\alpha_{ij} + \cot\beta_{ij})(p_j - p_i) = -2H_i\mathbf{n}_i, the discrete version of \Delta x = -2H\mathbf{n} (Meyer et al., 2003) — geometry and analysis are one.
Theorem 7.3 — Discrete Gauss–Bonnet For a closed mesh of genus g:
Key result — discrete Gauss–Bonnet \sum_{i \in V} \mathcal{K}_i = 2\pi\,\chi = 2\pi\,(2 - 2g),
where \chi = V - E + F is the Euler characteristic (chapter 9). The total curvature depends only on the topology — not on the geometry.
The site’s canonical statement is Geometric Data, Theorem 1.3 (Year 2), preceded there by the parallel-transport reading of the deficit; it gives no counting proof, so the short one below is kept here.
Proof. Counting. The double sum of angles runs over all the angles of all the faces: each triangle contributes \pi, so \sum_i \sum_j \theta_{ij} = \pi F \quad \text{and} \quad \sum_i \mathcal{K}_i = 2\pi V - \pi F. Each face has 3 edges and each edge carries 2 faces: 3F = 2E, so 2\pi E = 3\pi F, hence -2\pi E + 2\pi F = -3\pi F + 2\pi F = -\pi F \quad\Longrightarrow\quad 2\pi(V - E + F) = 2\pi V - \pi F = \sum_i \mathcal{K}_i.
Verification on the cube (Example 7.4 below): 8 vertices of deficit \tfrac{\pi}{2} give 4\pi = 2\pi \cdot 2, consistent with \chi = V - E + F = 8 - 12 + 6 = 2. ∎
Example 7.4 — Regular tetrahedron, and subdivisions Regular tetrahedron: each vertex carries 3 angles of 60° ⟹ \mathcal{K} = 2\pi - \pi = \pi, total 4\pi = that of the cube — same topological sphere, very different local curvatures (“pointy” vertices of the tetrahedron), same total.
Triangulating the cube by adding the center of each face (four triangles per face): the new centers are flat (zero deficit: four right angles, 2\pi around them), and the 8 corners keep the same deficit \tfrac{\pi}{2}, since each face still contributes 90° around them (two angles of 45°).
The sum is unchanged: the theorem is invariant under subdivision, an indispensable condition for “discrete curvature” to converge to the continuous curvature as the mesh is refined.
Estimating in practice Deficits give an integrated curvature; for a pointwise curvature, divide by the mixed Voronoi area A_i: K_i \approx \mathcal{K}_i / A_i, with the same areas as in chapter 5. For noisy meshes, smooth first (chapter 5) — curvature is a second derivative, twice as sensitive to noise as positions. These descriptors (K_i, H_i, principal directions) directly feed: adaptive remeshing (chapter 6), the descriptors of Geometric Deep Learning, and direction fields for quadrangulation.
Feature detection on meshes
The official programme lists feature detection with curvature. On a mesh, “features” are the sharp creases, the corners and the salient points used as landmarks for matching; all are read from the discrete quantities of this chapter and of chapter 1.
Definition 7.5 — Sharp edges, corners and feature points
- The dihedral deviation of an edge is the angle between the normals of its two faces: 0 when they are coplanar. An edge is sharp when this angle exceeds a threshold \tau (typically 30°–60°), chosen above the noise level.
- A vertex is a corner when it is incident to at least three sharp edges, or when its pointwise curvature |\mathcal{K}_i|/A_i (the Note above) is large; a vertex incident to exactly two sharp edges lies on a crease.
- Feature points at a chosen scale are the local maxima, over their neighbourhood, of a curvature or of the heat-kernel signature h_t(x, x) of chapter 8 (large t for coarse features: the tips of limbs).
Sharp edges are preserved by remeshing and smoothing (chapters 5–6); feature points serve as landmarks for correspondence (definition 8.4).
Example 7.6 — The subdivided cube of Example 7.4 In the cube triangulated with face centres, the 12 edges of the original cube separate faces whose normals differ by 90°: with \tau = 45° they are all sharp. The edges from a face centre to the four corners of its face join triangles of the same cube face: deviation 0, not sharp.
Each of the 8 corners is incident to 3 sharp edges and has angle deficit \pi/2: all detected as corners. The 6 face centres have no sharp edge and deficit 0: flat.
Now move every vertex by a random amount of the order of 1\% of the edge length: face normals tilt by about a degree, the flat edges stay far below \tau, and detection is unchanged; at noise comparable to the edge length, the deviations of flat edges reach \tau and false creases appear — smooth first (chapter 5), or raise \tau.
Lab 7.7 — Feature detection on a noisy mesh The code below builds the subdivided cube of Example 7.6 with outward-oriented faces, then applies Definition 7.5 with \tau = 45° at three noise levels: none, 0.01, and 0.3, comparable to the edge lengths (0.7 to 1).
Expected output: 12 sharp edges and 8 corners without noise and at noise 0.01; at noise 0.3, false creases appear (21 sharp edges for this seed). The total deficit stays exactly 4\pi at every noise level: Gauss–Bonnet (Theorem 7.3) does not see the noise, which makes it a free integrity check of the code.
On a real scan, load the mesh with any reader and choose \tau from the histogram of dihedral deviations: flat regions form a peak near 0, and the threshold goes in the valley after it.
import numpy as np
from collections import defaultdict
def subdivided_cube():
"""Unit cube, each face split into 4 triangles around its centre (Example 7.4)."""
P = [np.array(c, float) for c in np.ndindex(2, 2, 2)] # the 8 corners
F = []
for axis in range(3):
for side in (0.0, 1.0):
ring = [i for i in range(8) if P[i][axis] == side]
u, v = [a for a in range(3) if a != axis]
ring.sort(key=lambda i: np.arctan2(P[i][v] - .5, P[i][u] - .5))
c = np.full(3, .5); c[axis] = side
P.append(c); ic = len(P) - 1
for a, b in zip(ring, ring[1:] + ring[:1]): # outward orientation
out = np.cross(P[a] - c, P[b] - c) @ (c - .5) > 0
F.append((ic, a, b) if out else (ic, b, a))
return np.array(P), np.array(F)
def detect_features(P, F, tau=45.0):
"""Sharp edges (dihedral deviation > tau degrees), corners, angle deficits."""
N = np.cross(P[F[:, 1]] - P[F[:, 0]], P[F[:, 2]] - P[F[:, 0]])
N /= np.linalg.norm(N, axis=1, keepdims=True)
faces_of = defaultdict(list) # edge -> its two faces
for f, t in enumerate(F):
for k in range(3):
faces_of[tuple(sorted((t[k], t[(k + 1) % 3])))].append(f)
sharp = []
for e, (f, g) in faces_of.items():
dev = np.degrees(np.arccos(np.clip(N[f] @ N[g], -1, 1)))
if dev > tau:
sharp.append(e)
deficit = np.full(len(P), 2 * np.pi) # Definition 7.2
for t in F:
for k in range(3):
i, j, l = t[k], t[(k + 1) % 3], t[(k + 2) % 3]
a, b = P[j] - P[i], P[l] - P[i]
deficit[i] -= np.arccos(a @ b / np.linalg.norm(a) / np.linalg.norm(b))
n_sharp = np.bincount(np.ravel(sharp), minlength=len(P)) if sharp else np.zeros(len(P), int)
return sharp, np.flatnonzero(n_sharp >= 3), deficit
P, F = subdivided_cube()
rng = np.random.default_rng(0)
for noise in (0.0, 0.01, 0.3):
Q = P + noise * rng.standard_normal(P.shape)
sharp, corners, deficit = detect_features(Q, F)
print(f"noise {noise}: {len(sharp)} sharp edges, {len(corners)} corners, "
f"total deficit / pi = {deficit.sum() / np.pi:.6f}")8. The spectrum of shapes
How can a computer recognize that two meshes represent the same object in different poses, when their coordinates have nothing in common? This chapter uses the eigenvalues and eigenfunctions of the Laplacian, which do not change when a shape is bent without stretching, as a fingerprint of the shape and as a basis for matching.
Definition 8.1 — Laplace–Beltrami and spectrum On a compact, connected, boundaryless surface S, the Laplace–Beltrami operator \Delta_S (surface Laplacian) is self-adjoint and negative semi-definite, with compact resolvent: the eigenvalue problem -\Delta_S \phi_k = \lambda_k \phi_k has a spectrum that is a sequence 0 = \lambda_1 < \lambda_2 \leq \lambda_3 \leq \dots \to \infty, numbered from 1 as everywhere on the site, with orthonormal eigenfunctions \phi_1, \phi_2, \dots (a basis of L^2(S); \phi_1 is constant).
The spectrum \{\lambda_k\} (or its first N non-zero values (\lambda_2, \dots, \lambda_{N+1}), “ShapeDNA”) is an isometric invariant: two isometric surfaces have the same spectrum.
In practice: discretize with the cotangent stiffness matrix L_c and the mass matrix M = \mathrm{diag}(A_i) of chapter 5, so that -\Delta_S \approx M^{-1}L_c, and solve the generalized eigenvalue problem L_c\,\phi = \lambda\, M \phi, whose eigenvectors are M-orthonormal (\Phi^\top M \Phi = I) — the same objects as in chapters 5 and 7.
Example 8.2 — Exact spectra: clamped chain and cycle For a chain of n vertices whose two ends are attached to fixed points (Dirichlet conditions), the Laplacian is the tridiagonal matrix with 2 on the diagonal and -1 beside it, and \lambda_k = 2 - 2\cos\frac{k\pi}{n+1}, \qquad k = 1, \dots, n; for the cycle with n vertices (closed ring), the combinatorial Laplacian has one eigenvalue per frequency j of Theorem 5.2, 2 - 2\cos\frac{2\pi j}{n}, \qquad j = 0, \dots, n-1, which, sorted and numbered from 1, give 0 = \lambda_1 < \lambda_2 = \lambda_3 \leq \dots (frequencies j and n - j share a value).
For n = 10 path: \lambda_1 = 2 - 2\cos(\pi/11) \approx 0.081, \lambda_{10} \approx 3.919; cycle: \lambda_2 = \lambda_3 \approx 0.382, \lambda_{10} = 4 (frequency j = 5, alternation ±1, the highest possible frequency).
Geometric reading: closing the chain “tightens” the lowest frequency (the smallest non-zero eigenvalue goes from 0.081 to 0.382, multiplied by ~4.7): the smallest non-zero eigenvalue measures the connectedness / tightness of the shape — it is what discriminates components and pinch points (the applications of spectral segmentation).
Proposition 8.3 — Heat kernel and spectral signatures The solution of the heat equation \partial_t u = \Delta_S u, u(0) = f, writes u(t) = e^{t\Delta_S}f = \sum_{k \geq 1} e^{-\lambda_k t} \langle f, \phi_k\rangle \phi_k and the heat kernel h_t(x, y) = \sum_{k \geq 1} e^{-\lambda_k t}\phi_k(x)\phi_k(y) is an isometric invariant (proved in Geometric Data, Theorem 2.5, Year 2).
The heat kernel signature \mathrm{HKS}(x, t) = h_t(x, x), taken at a few times t, describes each point by “its” place in the spectrum — the basis of non-rigid shape correspondence. Its stability and its scale-invariant variant are the canonical Geometric Data, Definition 3.1; the wave kernel signature (WKS), a band-pass variant, is only a preview here, treated in the same chapter.
The converse “spectrum ⟹ shape” is false: there exist isospectral non-isometric surfaces (“you cannot hear the shape of a drum”, Gordon–Webb–Wolpert, 1992).
Interpretations and uses The eigenvalue \lambda_k is the square of a spatial frequency: small k = large undulations (silhouette), large k = details.
Direct applications: shape compression (projecting onto the \phi_k of small k), correspondence (coordination of eigenbases), retrieval (vector (\sqrt{\lambda_2}, \dots, \sqrt{\lambda_{N+1}}) renormalized by scale), segmentation (cutting along the level lines of \phi_2, the “Fiedler function” of Definition 8.5).
Numerical caution: only the first ~\sqrt{N} eigenvalues of a discretization with N vertices are reliable — beyond that, one describes the mesh, not the surface (same phenomenon as numerical dispersion in finite elements).
Definition 8.4 — Shape recognition, non-rigid matching and correspondence Recognition: measuring the similarity of two shapes S, T. The spectral signatures (“ShapeDNA” spectrum of definition 8.1, heat kernel of proposition 8.3) give fast retrieval. Preview, not developed in this course: the Gromov–Hausdorff distance compares the intrinsic geodesic distance matrices of the two shapes, without a common embedding.
Non-rigid matching: the two shapes are two poses of a single articulated object (a sitting or standing character) — related by a quasi-isometry \tau : S \to T that preserves geodesic distances up to an error \varepsilon; the intrinsic descriptors (the HKS) are then stable and match point to point.
Correspondence: the map x \mapsto \tau(x) itself. The functional maps approach (Ovsjanikov et al., 2012) transports functions instead of points.
Take the first k eigenfunctions of each shape as the columns of \Phi_S and \Phi_T (M-orthonormal), and their eigenvalues in the diagonal matrices \Lambda_S and \Lambda_T.
A function f on S has the coefficients a = \Phi_S^\top M_S f. The map acts on these coefficients as a small matrix C \in \mathbb{R}^{k \times k}, nearly diagonal when the shapes are nearly isometric and the eigenvalues are simple: the entries are close to ±1, one sign per eigenfunction, and a repeated eigenvalue gives a small block instead.
Given q descriptor functions on each shape (the HKS at q times, or feature-point indicators of Definition 7.5), stack their coefficients as the columns of D_S, D_T \in \mathbb{R}^{k \times q} and solve
Key result — a functional map by least squares C^\ast = \arg\min_{C}\ \big\|C D_S - D_T\big\|_F^2 + \gamma\,\big\|C\Lambda_S - \Lambda_T C\big\|_F^2 .
The first term preserves the descriptors; the second asks C to commute with the Laplacians, as the map of an exact isometry does. Since the commutativity term equals \sum_{i,j} C_{ij}^2\,\big(\lambda_j^S - \lambda_i^T\big)^2, the problem separates by rows: with c_i and d_i the i-th rows of C and D_T, written as columns, \big(D_S D_S^\top + \gamma\,\Omega_i\big)\, c_i = D_S\, d_i, \qquad \Omega_i = \mathrm{diag}\big((\lambda_j^S - \lambda_i^T)^2\big)_{j = 1, \dots, k}, that is, k linear systems of size k \times k.
A point-to-point map then follows by nearest neighbours between the rows of \Phi_S C^\top and those of \Phi_T. Exercise 9 does it on a small mesh; orthogonality constraints, refinement and learned descriptors are Geometric Data, ch. 4 (Year 2).
It is the official entry gate of the “non-rigid matching and correspondence” of the syllabus, extended in M2 by Analysis and Deep Learning on Geometric Data.
Spectral segmentation
Segmentation — cutting a shape into meaningful parts — is listed by the official programme among the analysis tasks. The spectrum gives a principled cut: the second eigenvector of the Laplacian, the Fiedler vector, varies slowly inside well-connected parts and fast across narrow necks.
Definition 8.5 — Fiedler vector and spectral bipartition Let L = D - A be the Laplacian of the mesh graph, with A its weighted adjacency matrix (entries w_{ij}: unit weights, or cotangent weights for a geometric version, in which case L = L_c) and D its degrees. Its smallest eigenvalue is \lambda_1 = 0 (constant vector) and its second, \lambda_2 = \min_{f \perp \mathbf{1},\, f \neq 0} \frac{f^\top L f}{f^\top f} = \min \frac{\sum_{(i,j)} w_{ij}(f_i - f_j)^2}{\sum_i f_i^2}, is reached at the Fiedler vector \phi_2 (numbering from 1, as in Definition 8.1 and Graph ML, Theorem 4.2).
For the indicator-like vector f = \mathbf{1}_{V_1} - \mathbf{1}_{V_2} of a split of the vertices into V_1 and V_2, f^\top L f = 4\,\mathrm{cut}(V_1, V_2), the total weight of the edges cut; minimizing over real vectors is the continuous relaxation of finding a small cut between balanced parts (ratio cut).
The spectral bipartition puts each vertex in V_1 or V_2 according to the sign of \phi_2 (or a level of it chosen to balance the areas); repeating on each part, or clustering the vertices by the first few eigenvectors, gives a segmentation into several parts. With the geometric weights, solve L_c\phi = \lambda M\phi instead, so that the cut balances areas rather than vertex counts.
Example 8.6 — Two triangles and a bridge Take two triangles a_1a_2a_3 and b_1b_2b_3 joined by the single edge a_1b_1 (unit weights).
By the symmetry exchanging the two triangles, look for f with f(a_1) = x, f(a_2) = f(a_3) = y and the opposite values on the b’s.
- At a_2 (degree 2): (Lf)(a_2) = 2y - x - y = \lambda y;
- at a_1 (degree 3, neighbours a_2, a_3, b_1): 3x - 2y + x = \lambda x.
The first equation gives x = (1 - \lambda)y; substituting in the second, 4(1-\lambda) - 2 = \lambda(1 - \lambda), \quad \text{i.e.} \quad \lambda^2 - 5\lambda + 2 = 0, whose smallest root is \lambda_2 = (5 - \sqrt{17})/2 \approx 0.44 (the other eigenvalues are 0, 3, 3, 3 and (5 + \sqrt{17})/2).
Then x \approx 0.56\,y: \phi_2 \propto (0.56, 1, 1, -0.56, -1, -1). Its sign separates the two triangles and cuts the bridge — one edge, the smallest possible cut — and the bridge vertices, with the smallest |\phi_2|, sit closest to the boundary. On a mesh of a character, the same computation separates limbs at their narrow joints.
Lab 8.7 — Spectral segmentation of a mesh The code below builds a closed “peanut”, the star-shaped surface r = 1 + 0.6\cos 2\theta in spherical coordinates: two lobes joined by a waist at z = 0. It assembles L_c and a lumped mass matrix M (barycentric areas, one third of each incident triangle: simpler than the mixed Voronoi areas of chapter 5, and enough here), then solves L_c\phi = \lambda M\phi for the smallest eigenvalues.
Expected output: \lambda_1 \approx 0, then a simple \lambda_2 \approx 0.73 well below the double \lambda_3 = \lambda_4 \approx 3.24 (rotational symmetry). The sign of \phi_2 agrees with the side of the waist on every vertex: the cut falls exactly at the neck.
Then load a real mesh — a character from TOSCA or FAUST — and cut it recursively: the first cuts fall at the narrowest joints. Sort the eigenvalues yourself: eigsh does not promise any order.
import numpy as np
import scipy.sparse as sp
from scipy.sparse.linalg import eigsh
def peanut(n_theta=41, n_phi=60):
"""Closed star-shaped surface r = 1 + 0.6 cos(2 theta): two lobes, a waist at z = 0."""
th = np.linspace(0, np.pi, n_theta + 1)[1:-1]
ph = np.linspace(0, 2 * np.pi, n_phi, endpoint=False)
T, Ph = np.meshgrid(th, ph, indexing="ij")
R = 1 + 0.6 * np.cos(2 * T)
P = np.c_[(R * np.sin(T) * np.cos(Ph)).ravel(),
(R * np.sin(T) * np.sin(Ph)).ravel(), (R * np.cos(T)).ravel()]
P = np.vstack([P, [0, 0, 1.6], [0, 0, -1.6]]) # the two poles
N, S, m = len(P) - 2, len(P) - 1, n_theta - 1
v = lambda i, j: i * n_phi + j % n_phi
F = []
for j in range(n_phi):
F += [(N, v(0, j), v(0, j + 1)), (S, v(m - 1, j + 1), v(m - 1, j))]
for i in range(m - 1):
F += [(v(i, j), v(i + 1, j), v(i + 1, j + 1)),
(v(i, j), v(i + 1, j + 1), v(i, j + 1))]
return P, np.array(F)
def cotan_laplacian(P, F):
"""PSD cotangent stiffness L_c and lumped (barycentric) mass matrix M."""
rows, cols, vals = [], [], []
for k in range(3):
i, j, o = F[:, k], F[:, (k + 1) % 3], F[:, (k + 2) % 3]
u, w = P[i] - P[o], P[j] - P[o] # angle at o faces edge (i, j)
cot = (u * w).sum(1) / np.linalg.norm(np.cross(u, w), axis=1)
rows += [i, j]; cols += [j, i]; vals += [-cot / 2, -cot / 2]
n = len(P)
Lc = sp.csr_matrix((np.concatenate(vals), (np.concatenate(rows), np.concatenate(cols))), (n, n))
Lc = Lc - sp.diags(np.asarray(Lc.sum(axis=1)).ravel()) # rows sum to zero
area = np.linalg.norm(np.cross(P[F[:, 1]] - P[F[:, 0]], P[F[:, 2]] - P[F[:, 0]]), axis=1) / 2
mass = np.zeros(n)
for k in range(3):
np.add.at(mass, F[:, k], area / 3)
return Lc, sp.diags(mass)
P, F = peanut()
Lc, M = cotan_laplacian(P, F)
lam, phi = eigsh(Lc, k=4, M=M, sigma=-1e-3) # eigenvalues closest to 0
order = np.argsort(lam); lam, phi = lam[order], phi[:, order]
fiedler = phi[:, 1] # phi_2 (numbered from 1)
print("lambda_1..4:", np.round(lam, 4))
side = np.sign(fiedler) == np.sign(fiedler[-2]) # same side as the north pole
print("cut agrees with z > 0 on", np.mean(side == (P[:, 2] > 0)))9. Combinatorial topology: Euler, Betti, persistence
Some properties of a shape survive any deformation: the number of pieces, of handles, of cavities. This chapter counts them combinatorially on a mesh with the Euler characteristic, recalls the Betti numbers and the persistence taught in the TDA module, and builds the filtration that a point cloud carries naturally: the alpha complex of chapter 4.
Theorem 9.1 — Euler–Poincaré formula For every connected closed mesh of genus g:
Key result — Euler–Poincaré formula \chi = V - E + F = 2 - 2g,
and more generally for an arbitrary complex \chi = \sum_{k} (-1)^k c_k = \sum_k (-1)^k \beta_k \qquad (c_k = \text{number of cells of dimension } k;\ \beta_k \text{ the Betti numbers}).
Proof sketch for a sphere: start from the tetrahedron (\chi = 2, Example 1.4) and note that the two local refinements of a triangulation do not change \chi:
- an edge split: the new vertex cuts the edge in two and is joined to the two opposite vertices, so +1 vertex, +3 edges, +2 faces;
- a face split: the new vertex is joined to the three corners of the face, so +1 vertex, +3 edges, +2 faces.
\Delta\chi = 1 - 3 + 2 = 0 in both cases. Any two triangulations of the sphere are connected by these operations, their inverses and edge flips (which change none of V, E, F). Adding a “handle” subtracts 2 from \chi — hence 2 - 2g. ∎
Recall — homology and persistence (taught in TDA, ch. 3–4)
Both tools are taught in full, with proofs and the reduction algorithm, in Topological Data Analysis, ch. 3 and ch. 4. This chapter uses only the following.
- Homology over \mathbb{Z}_2: H_k = \ker \partial_k / \mathrm{im}\, \partial_{k+1}, the cycles modulo the boundaries (TDA Definition 3.1).
- Betti numbers: \beta_k = \dim H_k counts the components (\beta_0), the independent loops (\beta_1 = 2g for a closed surface of genus g) and the cavities (\beta_2 = 1 for a closed connected surface).
- Examples: sphere (1, 0, 1), torus (1, 2, 1), double torus (1, 4, 1); the alternating sum gives back \chi (Theorem 9.1; TDA Theorem 3.5).
- Persistence: along a filtration K_0 \subseteq K_1 \subseteq \dots \subseteq K_m, classes are born and die. The barcode has one bar [\text{birth}, \text{death}) per class (TDA Theorem 4.2), computed by reducing the boundary matrix of the filtration (TDA Theorem 4.4).
- Reading: long bars are structure and short bars are noise; the stability theorem (TDA, ch. 7) guarantees that the barcode moves little when the data move little.
Definition 9.2 — The alpha filtration of a point cloud Let P \subset \mathbb{R}^2 be a finite set in general position, with its Delaunay triangulation (chapter 3). Each Delaunay simplex enters the alpha complex \mathcal{C}_\alpha of Definition 4.3 at the radius of the smallest empty disk whose boundary passes through its vertices:
- a vertex enters at \alpha = 0;
- a triangle enters at its circumradius;
- an edge pq enters at half its length when its diametral disk contains no other point of P (a Gabriel edge);
- otherwise the third vertex r of a Delaunay triangle pqr lies in that disk (the angle at r is obtuse), and the edge enters together with this triangle, at its circumradius.
A face never enters after its cofaces, so (\mathcal{C}_\alpha)_{\alpha \geq 0} is a filtration, and its barcode is computed as in TDA ch. 4.
By the nerve theorem (TDA, ch. 2), \mathcal{C}_\alpha has the homotopy type of the union of the disks of radius \alpha centred at the points of P. The alpha filtration therefore has the barcode of the Čech filtration, with O(n) simplices in the plane instead of up to 2^n - 1.
Example 9.3 — A noisy ring, read by persistence Take 1,000 points drawn uniformly in a ring (the disk of radius 2 minus the disk of radius 1), add Gaussian noise σ = 0.1, and filter them by Definition 9.2:
- H_0: 999 finite bars, all dying before \alpha \approx 0.2 (clusters merging), and 1 infinite bar (the component);
- H_1: one long bar, about [0.07\,;\,0.87], the central hole, and noise bars all shorter than about 0.1 (small holes plugged early).
Why these values: the loop is born when the band closes around the hole, at the scale of the gaps between samples. It dies when the last Delaunay triangle covering the hole enters, at its circumradius: about the radius of the largest empty disk left in the hole. Without noise this radius is at least 1, and the bar dies between 1.00 and 1.01; noisy points that stray into the hole make it smaller.
With σ = 0.2 the central bar shrinks to about [0.08\,;\,0.67] but stays more than five times longer than any noise bar: persistence, unlike counting at one fixed \alpha, is robust to noise. With σ = 0.4 the noise fills the hole: the bar falls to about [0.09\,;\,0.33], barely twice the noise bars, and no method can recover a hole that the data no longer show.
Persistence diagrams are the most widely used topological descriptor for learning, through vectorizations and kernels (TDA, ch. 8).
Topology and learning The invariants of this chapter serve as structural regularizers in learning. Persistence losses make a reconstruction keep the right number of components and holes (TDA, ch. 8). The genus of a generated shape is checked by extracting the surface of its learned SDF with the marching cubes of chapter 4 (Definition 4.4) and counting \chi = V - E + F (Theorem 9.1). The Gauss–Bonnet theorem (chapter 7) is the “curvature” case of the same idea: global quantities that constrain local solutions.
10. Course research notes (Desbrun, Memari)
Mathieu Desbrun — discrete differential geometry M. Desbrun (Caltech / Inria associate) is one of the founders of discrete exterior calculus and of the discrete geometric operators that structure this module:
- Discrete Exterior Calculus (with A. Hirani, M. Leok, J. Marsden, 2005) — arXiv math/0508341: a theory of differential forms on simplicial complexes that preserves the identities of the continuum exactly (Stokes, Hodge): the cotangent Laplacians of chapter 5 and the curvatures of chapter 7 are instances of it;
- Discrete Differential Forms for Computational Modeling (with E. Kanso, Y. Tong) — Springer chapter: the pedagogical version (why the “naive” discretization of operators loses the structure);
- The course Digital Geometry Processing with Discrete Exterior Calculus (K. Crane, F. de Goes, M. Desbrun, P. Schröder, SIGGRAPH Asia 2013) — ACM DL / open DDG notes: the reference for the labs (libigl), from the Laplacian to geometric flows.
Pooran Memari — topology and reconstruction of shapes CNRS senior researcher at LIX (École Polytechnique), P. Memari works at the interface of algorithmic geometry / topology:
- Geometric Tomography with Topological Guarantees (with O. Amini, J.-D. Boissonnat, Discrete & Computational Geometry, 2013) — arXiv / Springer: reconstructing a 3D solid from 2D cross-sections (serial microscopy); the analysis shows why naive reconstructions fail (two solids of different topologies can have the same cross-sections) and gives guarantees — exactly the “sample, reconstruct, guarantee” program of chapter 4;
- Her HDR thesis, “Points, Patterns and Shapes: towards accessible geometric modeling” (2024), synthesizes this program: point patterns (sampling, chapter 4), proximity structures (Voronoi/Delaunay, chapters 2–3), accessibility of modeling tools — page: LIX;
- Her work on distributed Delaunay triangulations (Tile & Merge, IEEE Big Data 2019) extends chapter 3 to cloud scale: meshing billions of points by cutting space into tiles whose Delaunay triangulations stitch back together.
Common thread The two research programs meet on one principle: a discretization must preserve the structure — differential identities on one side (Desbrun: exact discrete Stokes), topological invariants on the other (Memari: homeomorphism-type guarantees). This is the ridge line of the whole module: represent faithfully before analyzing, then learn — the gateway to Geometric Deep Learning (M2).
Exercises
★ Guided duality. For the sites p_1 = (0,0), p_2 = (4,0), p_3 = (0,3) of Example 2.4: (a) verify that (2, 1.5) is at distance 2.5 from the three sites; (b) draw the three perpendicular bisectors and the unbounded cell of p_2; (c) add p_4 = (4,3) — why are the four points cocircular, and which Delaunay triangulations does one obtain (lift the degeneracy by perturbation)?
★ Guided lift and incircle. (a) Implement the test of Theorem 3.4: for each triangle of
Delaunay(scipy), construct the plane \Pi and verify that no lifted point is under \Pi (tolerance 10^{-12}). (b) Compare with the incircle determinant (signs: interior/exterior). (c) Perturb a point toward the circumcircle of a neighboring triangle: observe the flip in the computed triangulation.★ Guided shrinking. (a) Complete the proof of Theorem 5.2: why does mode j decay exactly like \rho_j^k? What happens for \lambda > 1?
(b) Simulate a ring of radius 1, n = 50, \lambda = 0.5; plot the mean radius — by how much does it shrink in 100 iterations?
(c) Apply Taubin \lambda = 0.5, \mu = -0.53 and measure.
★ QEM. (a) Recover Example 6.3 (cube corner) in detail: write Q, b, c, verify Q = I. (b) Two perpendicular planes x = 0, y = 0 plus a “ceiling” plane z = 1: where does the optimal point fall and what is the cost? (c) Implement quadric edge contractions on a torus mesh (libigl) and plot the Hausdorff error as a function of the number of faces.
★ Gauss–Bonnet. (a) Verify Theorem 7.3 on the tetrahedron and the cube (by hand), then on the minimal 3 \times 3 torus (9 vertices, 27 edges, 18 faces — \chi = 0). (b) Show that an edge split does not change \chi (counting). (c) Subdivide the cube 3 times and numerically verify the invariance of the total deficit.
★★ Empty circle criterion. In a convex quadrilateral, \angle abc = 70° and \angle adc = 125° (diagonal ac). (a) Decide whether a flip is needed (Theorem 3.2). (b) After the flip, what is at least the smallest of the angles opposite the new diagonal? (c) Prove point (ii) of the proof: b \in \mathrm{disk}(a,c,d) \iff d \in \mathrm{disk}(a,b,c) for a convex quadrilateral.
★★ Lloyd. (a) Show that Lloyd relaxation decreases the quantization energy \mathcal{E} = \sum_i \int_{\mathcal{V}(p_i)} \|x - p_i\|^2\,dx (each iteration is an alternation: optimal cells for the sites, then optimal centroids for the cells). (b) Implement and plot \mathcal{E} (approximated by sampling) as a function of iterations on 100 points of the square.
★★ Spectra. (a) Prove the formula of Example 8.2 for the path (verify that u^{(k)}_i = \sin\frac{k\pi i}{n+1} is an eigenvector). (b) Compute the first 10 cotangent eigenvalues of a flat strip mesh and of the same bent strip (isometric); compare. (c) Discuss: why do the spectra diverge in practice (sampling, triangulation) while theory predicts equality?
★★ A functional map by least squares. (a) Prove the expression of the commutativity term given in Definition 8.4, and derive the k row systems.
(b) Take the peanut of Lab 8.7 and a copy whose vertices are randomly permuted (faces renumbered accordingly) and rotated: an exact isometry with a known answer. With k = 10 eigenfunctions, the HKS at five times from 0.01 to 1 as descriptors and \gamma = 10^{-3}, compute C and the point-to-point map, and count the vertices sent to their true image.
(c) Almost none are: explain why, from the symmetries of the peanut and the double eigenvalues of Lab 8.7. Then push the surface out by two Gaussian bumps at non-symmetric places and repeat: C becomes diagonal with entries \pm 1, and every vertex is matched.
★★ Guided persistence. (a) Build the alpha filtration of the noisy ring of Example 9.3, for instance with GUDHI’s
AlphaComplex(its filtration values are squared radii: take square roots to compare with Definition 9.2), and check the central H_1 bar against the example.(b) Increase σ from 0.1 to 0.5 and plot the lengths of the two longest H_1 bars. At what σ does the central bar stop standing out, and why does its death value fall as σ grows? Compare with the heuristic σ ≈ hole radius / 3, at which the noise starts to carry points to the centre of the hole.
(c) Replace the ring by two disjoint rings and verify \beta_1 = 2.
Projects and assessment
The official assessment, as quoted in the fiche above, is “lab assignments turned in during the semester and quizzes — no written exam; oral resit if necessary” (sections of the engineering degree and of the exchange programs; the LLGA section of the 2026–2027 sheet is empty). The solo subjects below are sized like a graded lab assignment and the group subjects like a course project. Since the course has no written exam, the exam below is a sample of what the quizzes and the oral resit can test. Everything in this section is a proposal, not an official rule.
The projects exercise mainly O6 (multimodal generative AI, through its 3D side: representing, reconstructing and matching shapes) and O4 (graph-structured data: a mesh is a graph, and its Laplacian is the one of Graph ML), with O7 (hands-on geometry processing on public scans) throughout and O1 for the learning subject. The retrieval subject builds, at course scale, the non-learned spectral baseline (ShapeDNA, HKS) that the learned shape tower of the Year 2 capstone Y2.3 is compared with, and every subject prepares Geometric Data (Year 2).
Solo projects
- [Solo · ≈ 20 h] A half-edge library tested by its own invariants. Paper: Garland and Heckbert (1997), Surface simplification using quadric error metrics, SIGGRAPH.
- Question: can a small NumPy library match a reference implementation on simplification quality, and which invariants of the course catch its bugs?
- Work: implement a half-edge mesh (Proposition 1.3) with QEM edge collapses (Definition 6.1, Theorem 6.2), Loop subdivision (Definition 6.5) and uniform, Taubin and cotangent smoothing (ch. 5). Turn the course’s invariants into unit tests: the planar test of Example 5.4, V - E + F kept by every collapse that passes the link condition, the total angle deficit 2\pi\chi of Theorem 7.3 kept by subdivision and simplification, the volume nearly kept by Taubin smoothing.
- Data: the Stanford Bunny and Armadillo (Stanford 3D Scanning Repository), and the minimal torus of Exercise 5.
- Success: every invariant test passes on every mesh; at 10 %, 5 % and 1 % of the faces, a symmetric Hausdorff error within 10 % of MeshLab’s quadric edge-collapse decimation (through PyMeshLab), measured with the same point sampling.
- Deliverables: code with its tests, 4–6 page report, 10-minute talk. Chapters: ch. 1, ch. 5, ch. 6, ch. 7, ch. 9.
- [Solo · ≈ 20 h] Spectral shape retrieval across poses. Papers: Reuter, Wolter and Peinecke (2006), Laplace–Beltrami spectra as “Shape-DNA” of surfaces and solids, Computer-Aided Design; Sun, Ovsjanikov and Guibas (2009), A concise and provably informative multi-scale signature based on heat diffusion, SGP. It builds the spectral baseline of the shape tower of the capstone Y2.3.
- Question: how well do the spectrum and the heat kernel signature recognise an object in a new pose, and how much does remeshing perturb them?
- Work: assemble L_c and M as in Lab 8.7 and compute the first 51 eigenpairs per shape (\lambda_1 = 0 and 50 non-zero values). Compare three global descriptors: ShapeDNA (the eigenvalues \lambda_2, \dots, \lambda_{51}, normalised by the area), a histogram of the HKS at a few times (Proposition 8.3), and the extrinsic D2 shape distribution of Osada, Funkhouser, Chazelle and Dobkin (2002) as a baseline. Then remesh each shape to 2,000 and 8,000 vertices (Definition 6.4) and plot the relative drift of \lambda_k against k.
- Data: TOSCA high-resolution (Bronstein, Bronstein and Kimmel, 2008): 80 meshes of animals and people, each in several poses.
- Success: leave-one-out nearest-neighbour accuracy and mean average precision of the class for the three descriptors, with the intrinsic ones ahead of D2 on the classes that change pose, or the gap explained; the index where the drift exceeds 1 %, compared with the \sqrt{N} rule of ch. 8.
- Deliverables: code, 4–6 page report, 10-minute talk. Chapters: ch. 5, ch. 6, ch. 8.
- [Solo · ≈ 20 h] Functional maps reproduced on FAUST. Paper: Ovsjanikov, Ben-Chen, Solomon, Butscher and Guibas (2012), Functional maps: a flexible representation of maps between shapes, ACM Transactions on Graphics (SIGGRAPH).
- Question: how much does the commutativity term of Definition 8.4 improve a map computed from descriptors alone, and how does the answer depend on the number k of eigenfunctions?
- Work: implement the row-by-row least-squares solver of Definition 8.4 (Exercise 9), with HKS descriptors at several times and the indicators of feature points (Definition 7.5). Compare \gamma = 0 with \gamma > 0, for k from 10 to 60, against direct nearest-neighbour matching of the HKS; then remesh one shape of each pair (Definition 6.4) and repeat.
- Data: FAUST (Bogo, Romero, Loper and Black, 2014), ten people in ten poses with ground-truth correspondences; pairs of poses of one person, then of two people.
- Success: the cumulative geodesic-error curve of Kim, Lipman and Funkhouser (2011), with geodesics approximated by Dijkstra on the mesh edges; the functional map above the HKS baseline at every radius; left–right symmetric flips counted and explained (Exercise 9c).
- Deliverables: code, 4–6 page report, 10-minute talk. Chapters: ch. 5, ch. 7, ch. 8.
Group projects
- [Group of 3 · ≈ 30 h each] From scans to a watertight mesh, with guarantees. Papers: Hoppe, DeRose, Duchamp, McDonald and Stuetzle (1992), Surface reconstruction from unorganized points, SIGGRAPH; Kazhdan, Bolitho and Hoppe (2006), Poisson surface reconstruction, SGP.
- Question: how do sampling density and noise drive the error and the topology of a reconstruction, and does the \varepsilon-sampling picture of Definition 4.1 predict the failures?
- Work: simulate partial depth scans of a known mesh from 6 to 10 viewpoints by ray casting, with controlled density and Gaussian noise. Clean them (statistical outliers), estimate and orient PCA normals (Definition 4.7), align them with ICP and a point-to-plane or trimmed variant (Definition 4.6), and reconstruct by marching cubes on a signed distance and by Poisson (ch. 4). Then run the pipeline on the ten original range scans of the Stanford Bunny.
- Split: scan simulation and cleaning; registration; reconstruction and evaluation.
- Success: the symmetric Hausdorff error to the ground-truth mesh against density and noise, decreasing as the samples densify (Proposition 4.2); watertight outputs with V - E + F = 2 (ch. 1, ch. 9); every topological failure traced to a region sampled coarsely compared with the reach.
- Deliverables: code, joint 8–10 page report, 20-minute talk. Chapters: ch. 1, ch. 4, ch. 9.
- [Group of 3 · ≈ 30 h each] From the cotangent Laplacian to a spectral GNN on meshes. Paper: Sharp, Attaiki, Crane and Ovsjanikov (2022), DiffusionNet: discretization agnostic learning on surfaces, ACM Transactions on Graphics. Connects this course to Graph ML, ch. 4–5 and to Geometric Data, ch. 6.
- Question: for vertex segmentation, what does a learned model gain over the unsupervised Fiedler cut, and does the cotangent Laplacian make it robust to remeshing where a graph operator fails?
- Work: compare (i) a GCN on the mesh graph with HKS input features, (ii) a spectral network filtering in the first 128 eigenvectors of L_c\phi = \lambda M\phi, (iii) the same network with the uniform Laplacian, (iv) a DiffusionNet-style model with learned diffusion times, and (v) recursive Fiedler cuts (Definition 8.5) as the unsupervised baseline.
- Data: the human-body segmentation dataset of Maron et al. (2017), eight body parts with its standard train / test split, as used by DiffusionNet; test meshes also remeshed with Definition 6.4.
- Split: data, operators and the Fiedler baseline; GCN and spectral networks; DiffusionNet-style model and the remeshing study.
- Success: per-vertex test accuracy (mean ± spread over 3 seeds) of the five methods on the original and remeshed test sets; a smaller drop under remeshing for the cotangent operators than for the graph and uniform ones, or the reason why not.
- Deliverables: code, joint 8–10 page report, 20-minute talk. Chapters: ch. 5, ch. 6, ch. 8.
- [Group of 2 · ≈ 25 h each] Choosing α by persistence for alpha-shape reconstruction. Paper: Edelsbrunner, Kirkpatrick and Seidel (1983), On the shape of a set of points in the plane, IEEE Transactions on Information Theory. Connects this course to Topological Data Analysis, ch. 4–5.
- Question: a fixed α must be tuned for every cloud; can the barcode of the alpha filtration choose α so that the reconstruction has the right Betti numbers?
- Work: implement the alpha filtration of Definition 9.2 in 2D with scipy’s Delaunay and its persistence, then use GUDHI’s
AlphaComplexin 3D. Choose α in the widest gap of the barcode, after the noise bars have died and before the first long bar dies. Compare with a fixed α tuned on one cloud and with Poisson reconstruction. - Data: synthetic clouds of known topology (rings, two rings, sphere, torus, double torus), then meshes of Thingi10K (Zhou and Jacobson, 2016) whose genus is listed, sampled with noise and with non-uniform density.
- Split: filtration and persistence; the choice of α and the reconstructions; the noise and sampling study.
- Success: the fraction of clouds rebuilt with the correct Betti numbers, against noise and non-uniformity, higher for the persistence rule than for the fixed α at every level, or each failure explained (Example 9.3: a hole that the data have filled).
- Deliverables: code, joint 6–8 page report, 15-minute talk. Chapters: ch. 3, ch. 4, ch. 9.
Written exam (proposal)
Two hours, no documents, no electronic device; four questions. The official assessment has no written exam: this is a sample of what the quizzes and the oral resit can test.
Question (5 points). Explain why uniform Laplacian smoothing shrinks a closed mesh, how Taubin’s λ|μ scheme prevents it, and why the cotangent Laplacian is preferred on irregular meshes. State the test that checks an implementation of the cotangent Laplacian.
Expected: on a ring, the iteration multiplies the mode of frequency j by \rho_j = 1 - \lambda(1 - \cos\frac{2\pi j}{n}) (Theorem 5.2). The mean is kept and every other mode decays, so the shape collapses to its barycentre.
Taubin alternates a step \lambda > 0 and a step \mu < -\lambda. With k an eigenvalue of L_{\mathrm{rw}}, the mode is multiplied by (1 - \lambda k)(1 - \mu k), slightly above 1 below the pass-band frequency k_{\mathrm{PB}} = 1/\lambda + 1/\mu and below 1 above it: the noise goes and the volume stays.
The uniform Laplacian sees only the connectivity: on an irregular mesh it drifts vertices tangentially and converges to no geometric operator. The cotangent Laplacian is the finite-element discretization of Laplace–Beltrami (Definition 5.3). The check is the planar test of Example 5.4: on a planar mesh every interior \delta_i vanishes.
Question (6 points). The regular octahedron has the six vertices \pm e_1, \pm e_2, \pm e_3.
Give V, E, F and \chi. (b) Compute the angle deficit of each vertex and check Theorem 7.3. (c) Compute the cotangent weight of an edge and the barycentric area of a vertex.
Compute the mean-curvature normal at e_3 by Definition 7.2, and compare with the circumscribed sphere. (e) Where does one step of uniform smoothing with \lambda = 1/2 send e_3?
Expected: (a) (V, E, F) = (6, 12, 8) and \chi = 6 - 12 + 8 = 2. (b) Four angles of 60° meet at each vertex, so the deficit is 2\pi - 4\pi/3 = 2\pi/3, and the total is 6 \cdot 2\pi/3 = 4\pi = 2\pi\chi.
Both angles opposite an edge are 60°, so w_{ij} = \tfrac12 \cdot 2\cot 60° = 1/\sqrt3. A face of side \sqrt2 has area \sqrt3/2, so A_i = 4 \cdot \tfrac{\sqrt3}{2} / 3 = 2/\sqrt3.
The four neighbours of e_3 sum to zero, so \frac{1}{A_i}\sum_j w_{ij}\,(p_j - e_3) = \frac{\sqrt3}{2}\cdot\Big(-\frac{4}{\sqrt3}\Big)e_3 = -2e_3 = -2H\mathbf{n}. Hence H = 1 with the outward normal \mathbf{n} = e_3: exactly the mean curvature of the circumscribed unit sphere. (e) The neighbour average is 0, so e_3 \mapsto e_3/2: one step halves the octahedron, the shrinkage of Theorem 5.2.
Question (5 points). Take a = (0, 0), b = (2, -1), c = (4, 0), d = (2, 1), triangulated by the diagonal ac.
- Decide with Theorem 3.2 whether the diagonal must be flipped, and compare the smallest angles before and after. (b) Give the entry value of each simplex of the Delaunay triangulation in the alpha filtration (Definition 9.2), and the H_0 and H_1 barcodes.
Expected: (a) At b, \cos\angle abc = \frac{(-2, 1)\cdot(2, 1)}{5} = -\frac35, \qquad \angle abc \approx 126.9° = \angle adc . The sum, 253.7°, exceeds 180°: the diagonal must be flipped to bd.
The smallest angle goes from \arctan\frac12 \approx 26.6°, at a and c, to 53.1°, with 63.4° at b and d: the flip doubles it (Theorem 3.3).
- Vertices enter at 0. The diametral disk of bd, of centre (2, 0) and radius 1, misses a and c: the diagonal enters at 1.
Each side has length \sqrt5 and its diametral disk misses the opposite vertex, so it enters at \sqrt5/2 \approx 1.118.
The triangles abd and bcd have circumcentres (5/4, 0) and (11/4, 0), hence the circumradius 5/4 at which both enter.
Barcodes: H_0 has [0, \infty), [0, 1) and twice [0, \sqrt5/2).
At \sqrt5/2 the four sides close two loops, filled at 5/4 by the two triangles, so H_1 has twice [\sqrt5/2,\ 5/4).
Question (4 points). Let L = D - A be the Laplacian of a graph with weights w_{ij} > 0. (a) Prove that f^\top L f = \sum_{(i,j) \in E} w_{ij}\,(f_i - f_j)^2 .
- Deduce that L is positive semi-definite, and that the multiplicity of its eigenvalue 0 is the number of connected components. (c) Show that f = \mathbf{1}_{V_1} - \mathbf{1}_{V_2} gives f^\top L f = 4\,\mathrm{cut}(V_1, V_2).
Expected: (a) f^\top L f = \sum_i d_i f_i^2 - \sum_{i,j} A_{ij} f_i f_j; an edge (i, j) contributes w_{ij}(f_i^2 + f_j^2) to the first sum and -2w_{ij} f_i f_j to the second, that is w_{ij}(f_i - f_j)^2.
Every term is non-negative, so L \succeq 0. For a positive semi-definite matrix, Lf = 0 if and only if f^\top L f = 0, that is f_i = f_j on every edge: f is constant on each component, and the kernel is spanned by the indicators of the components.
f_i - f_j is 0 inside a part and \pm 2 across, so each cut edge contributes 4w_{ij}.
Grading rubric (proposal)
| Criterion | Weight | What earns the marks |
|---|---|---|
| Understanding of the geometry | 20 % | Correct statement of the tools used (sampling and reach, Laplacians, spectrum, filtrations), with their assumptions checked and linked to the chapters |
| Implementation and correctness | 25 % | Code validated on the course’s invariants (planar test, V - E + F, total angle deficit) and on a hand-computed case (Example 8.6, Lab 8.7); fixed seeds; scripts that regenerate every figure |
| Experiments and evaluation | 25 % | The success criterion reached or the gap explained; honest baselines (uniform Laplacian, fixed α, HKS nearest neighbours, D2); spread over seeds or shapes |
| Analysis and critical view | 20 % | Failures traced to a cause (sampling coarser than the reach, obtuse triangles, symmetries and multiple eigenvalues, filled holes); one proposed improvement |
| Report and talk | 10 % | Clear structure, readable renders and plots, talk within time, precise answers; in groups, each member presents their part |
References
- M. Desbrun, A. Hirani, M. Leok, J. Marsden, Discrete Exterior Calculus, 2005; M. Desbrun, E. Kanso, Y. Tong, Discrete Differential Forms for Computational Modeling; M. Meyer, M. Desbrun, P. Schröder, A. Barr, Discrete Differential-Geometry Operators for Triangulated 2-Manifolds, 2003 (mixed Voronoi, deficits).
- K. Crane, F. de Goes, M. Desbrun, P. Schröder, Digital Geometry Processing with Discrete Exterior Calculus, SIGGRAPH Asia Courses 2013 — notes: DDG.
- O. Amini, J.-D. Boissonnat, P. Memari, Geometric Tomography with Topological Guarantees, Discrete & Computational Geometry, 2013 (Springer version); team page: LIX — P. Memari.
- J.-D. Boissonnat, F. Chazal, M. Yvinec, Geometric and Topological Inference, Cambridge Texts, 2018 (sampling, reach, reconstruction); H. Edelsbrunner, Geometry and Topology for Mesh Generation, Cambridge, 2001 (alpha-shapes, filtrations).
- N. Amenta, M. Bern, Surface Reconstruction by Voronoi Filtering, Discrete & Computational Geometry, 1999; M. Kazhdan, M. Bolitho, H. Hoppe, Poisson Surface Reconstruction, SGP 2006; W. Lorensen, H. Cline, Marching Cubes, SIGGRAPH 1987.
- M. Garland, P. Heckbert, Surface Simplification Using Quadric Error Metrics, SIGGRAPH 1997; G. Taubin, A Signal Processing Approach to Fairing (λ|μ), ICCV 1995; U. Pinkall, K. Polthier, Computing Discrete Minimal Surfaces (cotangents), 1993.
- M. Reuter, F.-E. Wolter, N. Peinecke, Shape DNA (Laplace–Beltrami spectrum), CAD 2006; C. Gordon, D. Webb, S. Wolpert, One Cannot Hear the Shape of a Drum, Bull. AMS 1992; Sun, Ovsjanikov, Guibas, Heat Kernel Signature, SGP 2009.
- H. Edelsbrunner, J. Harer, Persistent Homology — a Survey, Contemporary Mathematics 2008; the library GUDHI (Inria) for the labs.
- Lab tools: SciPy (
scipy.spatial: Voronoi, Delaunay, cKDTree), libigl, CGAL (alpha-shapes, Delaunay, reconstruction), MeshLab.