# conformallab++ vs. geometry-central — Detailed Comparison

> **Purpose of this document.**  
> conformallab++ and geometry-central (CMU, Keenan Crane's group) both implement
> discrete conformal equivalence of triangulated surfaces.  They share the same
> mathematical core but diverge in algorithmic strategy, scope, and target audience.
> This document maps the overlap precisely, identifies what cannot and should not be
> adopted, and explains where a side-by-side study creates scientific added value.

---

## 1 — Shared mathematical foundation

Both libraries implement the following chain:

```
Input mesh M  →  edge lengths ℓᵢⱼ  →  solve for u ∈ ℝᵛ
  such that  ℓ̃ᵢⱼ = e^{(uᵢ+uⱼ)/2} · ℓᵢⱼ  satisfies  Σα_v(u) = Θᵥ  ∀v
```

The variational framework that makes this a well-posed optimisation problem goes
back to **Bobenko & Springborn (2004)**.  The hyperbolic (HyperIdeal) geometry is
from **Springborn (2020)**.  The geometry-central implementation (Gillespie,
Springborn & Crane, SIGGRAPH 2021) is an explicit extension of Springborn 2020
to intrinsic triangulations.

**Key consequence:** the *mathematical problem* is identical.  Any difference in
output is either a normalization convention or a bug in one of the two libraries —
making cross-validation directly meaningful.

---

## 2 — Algorithmic comparison

| Dimension | conformallab++ | geometry-central (Gillespie 2021) |
|---|---|---|
| **Solver** | Newton–Raphson, analytical Hessian | Newton or Yamabe gradient flow (user choice) |
| **Convergence** | Quadratic (8–20 iterations on typical meshes) | Newton: quadratic; Yamabe: linear (~hundreds of steps) |
| **Triangulation** | Fixed throughout — operates on original `Surface_mesh` | Ptolemaic flips applied before/during solve to reach intrinsic Delaunay |
| **Hessian** | SimplicialLDLT + SparseQR fallback; analytical for Euclidean/Spherical, FD for HyperIdeal | Assembled on the current (possibly flipped) triangulation |
| **Mesh backend** | CGAL `Surface_mesh<Point_3>` | geometry-central `ManifoldSurfaceMesh` |
| **Geometry modes** | Euclidean ✓ · Spherical ✓ · HyperIdeal ✓ | Euclidean ✓ · Hyperbolic ✓ · Spherical ✗ |
| **Open meshes** | ✓ (boundary DOFs pinned) | ✓ |

### Why Newton on a fixed triangulation works well

The Euclidean and HyperIdeal energies are strictly convex after gauge-fixing.
Newton therefore converges from u=0 in 8–20 iterations for any reasonable mesh.
The Hessian is the cotangent Laplacian (Euclidean) or its hyperbolic analog —
well-conditioned on Delaunay meshes, but can degrade on strongly non-Delaunay inputs.

### What Ptolemaic flips add

A Ptolemaic flip replaces diagonal AC with BD in a quadrilateral under the constraint
that the Ptolemy relation

```
AC · BD = AB · CD + AD · BC
```

holds.  This is *conformal-class-preserving* — the new λ₀ values represent the same
discrete conformal structure.  The gain: the flipped triangulation is intrinsic
Delaunay, which bounds the off-diagonal Hessian entries and prevents ill-conditioning
on pathological inputs.

**This is the only genuine algorithmic advantage geometry-central has for the shared
sub-problem.** It costs nothing mathematically and buys robustness on bad meshes.

---

## 3 — Feature matrix: what exists where

| Feature | conformallab++ | geometry-central | Notes |
|---|---|---|---|
| Discrete conformal equivalence (Euclidean) | ✓ | ✓ | Shared core |
| Discrete conformal equivalence (Hyperbolic/HyperIdeal) | ✓ (Springborn 2020 formulation) | ✓ (Gillespie 2021 extension) | Mathematically equivalent |
| Discrete conformal equivalence (Spherical) | ✓ | ✗ | Unique to conformallab++ |
| Analytical Hessian (Euclidean & Spherical) | ✓ | ✓ | |
| Analytical Hessian (HyperIdeal) | FD (Phase 9b: analytical planned) | ✓ | gc has analytical version |
| Gauss–Bonnet check & enforce | ✓ | implicit in solver | |
| Tree-cotree cut graph (2g seam edges) | ✓ | ✗ | Required for period matrix |
| Priority-BFS layout in ℝ²/S²/Poincaré disk | ✓ | partial (conformal param only) | |
| Möbius holonomy SU(1,1) | ✓ | ✗ | Unique to conformallab++ |
| Period matrix τ ∈ ℍ + SL(2,ℤ) reduction | ✓ | ✗ | Unique to conformallab++ |
| Fundamental domain + tiling | ✓ | ✗ | Unique to conformallab++ |
| Intrinsic Delaunay triangulation | ✗ | ✓ | gc has via SignpostIntrinsicTriangulation |
| Ptolemaic flips | ✗ | ✓ | gc's robustness mechanism |
| Heat method (geodesic distances) | ✗ | ✓ | Auxiliary tool in gc |
| YAML/declarative pipeline | ✓ (Phase 8e spec) | ✗ | |
| CGAL-package submission | ✓ (Phase 8 target) | ✗ | |
| JSON/XML serialisation | ✓ | ✗ | |
| CLI app | ✓ | ✗ | |
| Inversive distance functional (Luo 2004) | ✗ (Phase 9a) | ✗ | Neither has it yet |
| Siegel period matrix Ω (genus g≥2) | ✗ (Phase 10b) | ✗ | |

---

## 4 — What should be adopted — and what should not

### Adopt: Ptolemaic pre-conditioning (GC-2, after Phase 8)

**What:** a single preprocessing pass that Delaunay-izes the input triangulation
via Ptolemaic flips, updates λ₀ accordingly, then hands off to the existing
Newton pipeline unchanged.

**Why it fits:**
- Preserves the conformal class — mathematically sound
- Drop-in before `compute_euclidean_lambda0_from_mesh()`, no interface change
- Does not touch cut graph, holonomy, period matrix
- ~200 lines of code, one new test suite

**Interface sketch:**
```cpp
// include/preprocessing_delaunay.hpp  (Phase GC-2)
void ptolemy_delaunay(ConformalMesh& mesh, EuclideanMaps& maps);
// Flips edges until all faces satisfy the Delaunay condition.
// Updates maps.lambda0[e] via the Ptolemy relation after each flip.
// Prerequisite: compute_euclidean_lambda0_from_mesh() already called.
// Postcondition: mesh is an intrinsic Delaunay triangulation of the same surface.
```

### Adopt partially: analytical HyperIdeal Hessian

geometry-central has a closed-form Hessian for the hyperbolic energy.
conformallab++ currently uses finite differences (Phase 9b plans analytical).
The geometry-central implementation can serve as a reference for Phase 9b —
not a code copy, but a mathematical cross-check.

### Do not adopt: full intrinsic triangulations as architecture

**SignpostIntrinsicTriangulation** is geometry-central's core data structure.
It tracks vertex positions as (face, barycentric coordinates) rather than 3D points.
Replacing `CGAL::Surface_mesh` with this would require:

1. Rewriting the cut graph algorithm (which works on halfedges of the *original* mesh
   and must survive across flips — non-trivial bookkeeping)
2. Tracking seam edges through flip events for holonomy computation
3. Abandoning the CGAL package target (Phase 8) — CGAL's mesh concepts are extrinsic
4. Losing the 3D layout output (Poincaré disk, sphere) which clients depend on

**Verdict:** the architecture incompatibility is fundamental, not incidental.
The period matrix pipeline requires a stable topological cut that does not survive
arbitrary flip sequences. This is not a solvable engineering problem within the
current project scope — it would be a different project.

### Do not adopt: Yamabe flow

Newton converges in 8–20 iterations; Yamabe flow needs hundreds.
The only reason to use Yamabe flow is when the Hessian is indefinite (which happens
in the Spherical case — and conformallab++ already handles this with the correct
sign flip in the energy). There is no mesh type where Yamabe flow beats Newton
on metrics that conformallab++ targets.

---

## 5 — Where cross-comparison creates scientific added value

### 5.1 — Independent cross-validation of the shared core

The discrete conformal equivalence problem for Euclidean and HyperIdeal geometry
is implemented independently in two codebases, by different groups, with different
algorithms.  Agreement on:

- the u-vector (after normalization)
- UV coordinates (up to Möbius transformation)
- the residual ‖G(u*)‖ at convergence

would constitute **mutual validation without ground truth**.  This is the same
methodology used in numerical PDE literature to validate independent solvers.

**Concrete protocol:**
```
For each test mesh (cathead.obj, brezel.obj, torus_4x4.off, torus_hex_6x6.off):
  1. Load into both libraries with identical vertex ordering
  2. Run conformallab++ Newton solver  →  u_clab, UV_clab
  3. Run geometry-central solver        →  u_gc,   UV_gc
  4. Normalize both (subtract mean, divide by scale)
  5. Report  max|u_clab[v] - u_gc[v]|  and  mean conformal distortion difference
```

Expected: agreement to ≤ 1e-8 on well-conditioned meshes.  Discrepancy would
indicate a bug or a normalization mismatch worth investigating.

### 5.2 — Convergence study: Newton with vs. without Ptolemaic pre-conditioning

Hypothesis: on non-Delaunay meshes (e.g. a torus refined by subdivision without
re-meshing), Ptolemaic Delaunay pre-conditioning reduces Newton iteration count.

**Measurable quantities:**
- Newton iterations to ‖G‖ < 1e-8
- Hessian condition number κ(H) at u = 0
- Wall-clock time

This comparison requires only GC-2 to be implemented in conformallab++ and would
answer the question: *how bad does a mesh have to be before Ptolemaic pre-conditioning
pays off?*

**Publication potential:** a short note or conference contribution comparing the
two approaches on a systematic mesh quality benchmark would be self-contained and
novel — neither library has published this comparison.

### 5.3 — Period matrix and holonomy as differentiating contribution

geometry-central deliberately stops at the conformal parameterization.  The period
matrix τ and Möbius holonomy computation in conformallab++ extend the pipeline into
Teichmüller theory territory that geometry-central does not address.

This is the strongest scientific differentiator: conformallab++ can compute

```
τ = ω_b / ω_a  ∈ ℍ,  SL(2,ℤ)-reduced
```

for any closed genus-1 surface, and (in Phase 10) the Siegel matrix Ω for genus g≥2.
No other open-source C++ library does this.  Cross-comparison with geometry-central
makes this gap explicit and positions conformallab++ as the more complete tool for
Teichmüller-theoretic applications.

### 5.4 — Spherical geometry as unique contribution

The Spherical geometry mode (angle sums → 4π on a sphere, NSD Hessian with sign
flip) has no counterpart in geometry-central.  A mathematician interested in
conformal maps on surfaces of positive curvature (constant curvature +1) has no
alternative in open-source C++.

### 5.5 — Validation of Springborn 2020 in two independent implementations

Springborn 2020 ("Ideal Hyperbolic Polyhedra and Discrete Uniformization") is the
shared theoretical reference for both the HyperIdeal geometry mode in conformallab++
(Phase 2/3) and the hyperbolic component of Gillespie 2021 in geometry-central.
Cross-checking the ζ-function values (ζ₁₃, ζ₁₄, ζ₁₅) and the resulting angle sums
on the same meshes would validate both implementations of the paper — a service to
the discrete geometry community.

---

## 6 — Demarcation: where the comparison ends

| Topic | conformallab++ | geometry-central | Comparable? |
|---|---|---|---|
| u-vector at convergence | ✓ | ✓ | ✓ after normalization |
| UV parameterization | ✓ | ✓ | ✓ up to Möbius |
| Convergence speed (iterations) | ✓ | ✓ (Newton mode) | ✓ direct |
| HyperIdeal angle sums | ✓ | ✓ | ✓ |
| Spherical angle sums | ✓ | ✗ | ✗ |
| Period matrix τ | ✓ | ✗ | ✗ |
| Holonomy T_a, T_b | ✓ | ✗ | ✗ |
| Fundamental domain | ✓ | ✗ | ✗ |
| Intrinsic Delaunay quality | not tracked | ✓ | — |
| Mesh topology handling | CGAL halfedge | gc manifold mesh | not comparable |
| Scalability (large meshes) | not benchmarked yet | benchmarked in paper | comparable if same mesh |

The comparison is meaningful and complete for the **shared conformal core**.
It ends where conformallab++ continues into Teichmüller theory (holonomy, τ,
fundamental domain) — that region has no counterpart in geometry-central and
must be validated by analytic invariants alone (→ `doc/math/validation.md`).

---

## 7 — Practical roadmap for the comparison

| Step | When | What | Effort |
|---|---|---|---|
| **GC-1a** | Now | Manual UV comparison on cathead.obj — run both, diff u-vectors | 1 day |
| **GC-1b** | Now | Add normalization utility to conformallab++ (`normalize_u_vector()`) | 2h |
| **GC-1c** | After Phase 8 | Automated comparison script (Python or small C++ binary) | 2 days |
| **GC-2** | After Phase 8 | `ptolemy_delaunay()` preprocessing pass | 1 week |
| **GC-bench** | After GC-2 | Convergence study: Newton ± Ptolemaic pre-conditioning on 10 meshes | 1 week |
| **GC-paper** | Phase 10 | Short note on the comparison — period matrix as differentiator | — |

---

## 8 — References

| Reference | Role in this comparison |
|---|---|
| **Bobenko, Springborn** — *Variational Principles for Circle Patterns*, Trans. AMS (2004) | Shared variational foundation for all three geometry modes |
| **Springborn** — *Ideal Hyperbolic Polyhedra and Discrete Uniformization*, DCG (2020) | Mathematical basis for HyperIdeal in conformallab++ AND for Gillespie 2021 |
| **Gillespie, Springborn, Crane** — *Discrete Conformal Equivalence of Polyhedral Surfaces*, SIGGRAPH (2021) | geometry-central implementation; introduces Ptolemaic flips |
| **Sharp, Soliman, Crane** — *Navigating Intrinsic Triangulations*, SIGGRAPH (2019) | geometry-central `SignpostIntrinsicTriangulation` — basis for GC-2 |
| **Sechelmann** — doctoral thesis, TU Berlin (2016) | conformallab++ primary source; covers period matrix, holonomy, all three modes |
