Tarik Moussa
a937edcafe
docs: Dissertation, GitHub-Repo, Website und LinkedIn von Stefan Sechelmann ergänzt
...
C++ Tests / test-fast (push) Successful in 2m5s
C++ Tests / test-cgal (push) Has been skipped
README:
- Neuer Einstieg mit vollständiger Dissertation-Referenz (Titel, TU Berlin 2016,
DOI 10.14279/depositonce-5415, CC BY-SA 4.0)
- Links zu Original-Java-Repo, sechel.de und linkedin.com/in/sechel
- Neuer Abschnitt "Ursprung & Danksagung" vor der Lizenz
doc/architecture/overall_pipeline.md:
- Neuer "Origin"-Abschnitt ganz oben mit vollständiger Quellenangabe
- Literaturabschnitt erweitert: Dissertation als "Primary source" hervorgehoben,
Java-Original-Repo als direkter Port-Bezug dokumentiert
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-14 12:33:30 +02:00
Tarik Moussa
5333ed143a
docs: README vollständig überarbeitet — Phase 7 aktuell, Redundanzen entfernt
...
- Status-Banner: Phase 7 ✅ , 158 Tests (war: Phase 6, 121 Tests)
- Features-Tabelle: Phase 7 Zeilen ergänzt (Priority-BFS, MobiusMap,
halfedge_uv, Möbius-Holonomie, Periodenmatrix, Fundamentalbereich)
- Bibliotheks-Nutzung: Holonomie/Periodenmatrix/Fundamentalbereich-Beispiele
- Öffentliche Header: period_matrix.hpp + fundamental_domain.hpp ergänzt
- Projektstruktur: neue Dateien + korrigierte Testzahlen
- Test-Suiten: 12 neue Suiten (Phase 7), Gesamt 158
- Mathematischer Umfang: ❌ → ✅ für Holonomie, Periodenmatrix Genus-1,
halfedge_uv, exakte Trilateration, Schnittgraph
- Veraltete Abschnitte entfernt: "Porting the Java uniformization pipeline"
Roadmap (Schritte 1-5 alle umgesetzt), Layout-Vergleich-Codeblöcke
mit vorgeschlagenen Implementierungen (jetzt live)
- Roadmap: Phase 7 ✅ mit Details, Phase 8 geplant
- Sprache: auf Deutsch vereinheitlicht (war gemischt DE/EN)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-14 10:34:24 +02:00
Tarik Moussa
4fc48b39f0
feat(phase6): exact hyperbolic layout, Gauss–Bonnet, cut graph, normalisation — 121 tests
...
New files:
- gauss_bonnet.hpp: euler_characteristic, genus, Σ(2π-Θ_v) sum/rhs/deficit,
check_gauss_bonnet (throws), enforce_gauss_bonnet (correct sign: Δ=(lhs-rhs)/V)
- cut_graph.hpp: CutGraph struct + compute_cut_graph (tree-cotree, Erickson–Whittlesey
2005); boundary edges correctly excluded from cut set
- test_phase6.cpp: 26 new tests (GaussBonnet ×8, CutGraph ×6, HyperbolicTrilateration
×4, Normalisation ×4 — all pass)
layout.hpp (Phase 6 rewrite):
- detail::trilaterate_hyp: exact Möbius + hyperbolic law of cosines replacing old tanh(d/2)
- detail::center_poincare_disk: Möbius centering for hyperbolic normalisation
- normalise_euclidean: centroid → origin + PCA major-axis rotation
- normalise_hyperbolic: Möbius centering in the Poincaré disk
- normalise_spherical: Rodrigues rotation → north pole
- euclidean_layout / hyper_ideal_layout: optional CutGraph* + HolonomyData* + normalise
Bug fixes caught by new tests:
- gauss_bonnet.hpp: enforce_gauss_bonnet had wrong sign for delta
- cut_graph.hpp: boundary edges were incorrectly marked as cut edges
121 tests pass, 2 skipped (Hessian stubs).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-13 01:15:41 +02:00
Tarik Moussa
24f7607b2d
docs: detailed layout comparison + uniformization porting roadmap
...
Mathematical scope section:
- Expanded layout comparison table with 4 concrete differences:
(1) hyperbolic trilateration exact vs. tanh(d/2) approximation
(2) closed mesh handling: holonomy/period matrices vs. seam flag
(3) layout normalisation: Möbius vs. raw BFS output
(4) Gauss–Bonnet pre-check: Java has it, C++ does not
- Added Möbius trilateration code snippet showing exact implementation path
- Added 10-row Java vs. C++ summary matrix
For mathematicians section:
- New subsection: "Porting the Java uniformization pipeline"
Step 1: Gauss–Bonnet check (~30 lines, complete implementation template)
Step 2: Homological basis / fundamental polygon cut (CutGraph struct + BFS hook)
Step 3: Holonomy tracking (EuclideanHolonomy + MöbiusElement structs)
Step 4: Period matrix extraction (genus 1 via holonomy translations, genus ≥ 2 via Fuchsian group)
Step 5: Layout normalisation (canonical Möbius post-processing)
Priority table: 6 steps, estimated effort, C++ hook location
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-13 00:53:47 +02:00
Tarik Moussa
b7593e3f6d
feat(phase5): Layout, CLI, JSON/XML serialisation — 95 tests
...
Phase 5 complete:
layout.hpp
- euclidean_layout(): BFS unfolding in ℝ² using trilaterate_2d
- spherical_layout(): BFS on S² using trilaterate_sph (spherical law of cosines)
- hyper_ideal_layout(): BFS in Poincaré disk (tanh(d/2) Euclidean approx)
- save_layout_off(): convenience OFF writer for 2-D and 3-D layouts
serialization.hpp
- save/load_result_json(): nlohmann/json; stores DOF vector + uv/pos layout
- save/load_result_xml(): hand-written writer/parser; same schema
conformallab_cli.cpp (rewritten)
- CLI11 interface: -i/-o/-g/-j/-x/-s/-v
- Dispatches to euclidean / spherical / hyper_ideal pipeline
- Runs Newton, computes layout, saves OFF + JSON + XML
examples/example_layout.cpp
- Full round-trip demo: solve → layout → JSON/XML → reload → verify
tests/cgal/test_layout.cpp (8 tests)
- Euclidean_PreservesEdgeLengths, CorrectVertexCount, TriangleIsNonDegenerate
- Spherical_PreservesArcLengths, PositionsOnUnitSphere
- HyperIdeal_SuccessAndFinitePositions
- Serialization.JSON_RoundTrip, XML_RoundTrip
All 95 CGAL tests pass (2 skipped — Hessian stubs unchanged).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-13 00:53:47 +02:00
Tarik Moussa
3f124eb071
feat(phase4): HyperIdeal Newton solver, SparseQR fallback, examples, docs
...
Phase 4 complete — 87 CGAL tests pass, 2 skipped.
Newton solver (phase4a):
- hyper_ideal_hessian.hpp: symmetric FD Hessian (O(ε²), PSD by convexity)
- newton_hyper_ideal(): Newton + backtracking for the HyperIdeal functional
- detail::solve_with_fallback(): optional bool* fallback_used parameter
- solve_linear_system(): public API exposing LDLT→SparseQR fallback
SparseQR fallback tests (SparseQRFallback.*):
- FullRankSystem_CorrectSolution: LDLT path, fallback_used=false
- SingularMatrix_FallbackActivated: zero-pivot → QR activated, fallback_used=true
- Euclidean_ClosedMeshNoPinConverges: gauge-mode null space handled via QR
HyperIdeal Newton tests (NewtonSolver.HyperIdeal_*):
- ConvergesTriangleAllVariable, ResultFieldsConsistent,
ConvergesTetrahedron, SparseQRFallbackNoCrash
- Natural-target base point (b=1.0, a=0.5) — x=0 is degenerate in log-space
Pipeline tests (test_pipeline.cpp):
- End-to-end: all three geometries, mesh I/O round-trip, solve+export
Example programs (code/examples/):
- example_euclidean.cpp: headless Euclidean pipeline
- example_hyper_ideal.cpp: headless HyperIdeal pipeline
- example_viewer.cpp: interactive libigl viewer with jet colour map
README:
- Mathematical scope table: C++ vs Java original (18 rows)
- "For mathematicians" section: mental model, step-by-step new-functional
guide, half-edge traversal snippets, recommended reading
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-13 00:11:25 +02:00
Tarik Moussa
5841646017
docs: update README — Phase 3 vollständig abgeschlossen (62 Tests)
...
Mark all Phase 3 sub-phases (3a–3g) as done in the roadmap.
Add euclidean_hessian and spherical_hessian to the feature table.
Update status banner: 62 tests, Phase 4 is next.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2026-05-12 17:25:26 +02:00
Tarik Moussa
8c353bb884
feat(phase3d+3e): port EuclideanCyclicFunctional + add SphericalFunctional gauge-fix
...
Phase 3d — EuclideanCyclicFunctional:
• euclidean_geometry.hpp: t-value / atan2 corner-angle formula with
centering trick (μ = (Λ̃₁₂+Λ̃₂₃+Λ̃₃₁)/6) for numerical stability
• euclidean_functional.hpp: EuclideanMaps bundle, gradient (G_v = Θ_v − Σα_v,
G_e = α_opp⁺ + α_opp⁻ − φ_e), 10-point GL path-integral energy,
gradient_check_euclidean — identical halfedge convention to SphericalFunctional
• test_euclidean_functional.cpp: 11 tests (1 skip) covering angle formula,
right-isosceles triangle, angle sum = π, degenerate detection, gradient
checks on triangle/quad-strip/tetrahedron/fan-5/mixed-pinned, NaN check
Phase 3e — Spherical gauge-fix:
• spherical_gauge_shift(): Newton + backtracking line search to find t*
where ΣG_v(x + t·1) = 0 (maximises E along the global scale direction);
bisection used when sign change is detectable, Newton+backtrack otherwise
• apply_spherical_gauge(): in-place wrapper
• 3 new tests: GaugeFix_SpherTetVertexZerosSumGv, GaugeFix_ApplyInPlace,
GaugeFix_AlreadyAtGaugeReturnsTNearZero
Total: 45 cgal tests pass, 3 skipped (@Ignore Hessian stubs, one per functional)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-12 07:39:14 +02:00
Tarik Moussa
dc0d3ca005
docs: add Phase 3d–4b roadmap to README
...
Six concrete next steps toward Phase 3 completion and Phase 4 (solver):
3d EuclideanCyclicFunctional — most critical missing functional
3e Spherical gauge-fix (1D Brent along additive u constant)
3f Analytic Hessian via CGAL::Weights::cotangent_weight()
3g Consolidate duplicate PI constant
4a Minimal Newton solver with Eigen SimplicialLDLT
4b CGAL::IO read/write OBJ for mesh round-trip testing
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-12 00:25:36 +02:00
Tarik Moussa
a4c2a89e7e
feat(phase3c): port SphericalFunctional onto ConformalMesh; update README
...
New headers:
- spherical_geometry.hpp: spherical arc length l(λ) and half-angle formula
for interior angles of a spherical triangle (SphericalFaceAngles struct)
- spherical_functional.hpp: SphericalMaps bundle, setup/assign DOF helpers,
compute_lambda0_from_mesh(), gradient (Θ_v − Σα_v; Schläfli edge formula),
energy via 10-point Gauss-Legendre path integral, gradient_check_spherical()
Updated:
- mesh_builder.hpp: add make_spherical_tetrahedron() (vertices on unit sphere)
and make_octahedron_face() (single right-angled spherical triangle)
- tests/cgal/CMakeLists.txt: enable test_spherical_functional.cpp
- README.md: rewrite for CGAL-package goal, two test targets, all headers,
updated project tree, Phase progress table, key design decisions
Tests (cgal.SphericalFunctional.*): 8 active + 1 skip
- OctaFaceAnglesAreRightAngles, SpherTetAngleSumExceedsPi
- GradientCheck_{OctaFaceVertex, SpherTetVertex, SpherTetAllDofs,
SpherFan4Vertex, MixedPinnedVertices}
- AnglesFiniteAtKnownPoint
All 30 cgal.* tests pass (2 @Ignore skips).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-12 00:01:24 +02:00
Tarik Moussa
e59f79a8e2
docs + ci: update README, add ci-cpp Docker image, use container in workflow
...
README:
- Remove stale Boost mention (unused dep, removed yesterday)
- Document three build modes (tests-only / WITH_VIEWER / WITH_CGAL)
with a comparison table and per-mode cmake commands
- Add project structure overview
- Fix C++20 → C++17 (actual standard used)
- Fix clone URL and getting-started commands
- Add CI section with Dockerfile build instructions
CI:
- Add .gitea/docker/Dockerfile.ci-cpp — ubuntu:22.04 with cmake,
g++, git, and Node.js 20 pre-installed (Node.js needed for
actions/checkout@v4 inside containers)
- Update cpp-tests.yml to use ci-cpp container instead of installing
build tools on every run; add JUnit XML output and summary step
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-09 21:49:44 +02:00
Tarik Moussa
d134add5a6
update readme
2026-03-07 11:25:56 +02:00
Tarik Moussa
14c825dcf0
v0
2026-03-06 21:55:16 +02:00
Tarik Moussa
e1a90dbd85
fix typo
2026-03-06 21:43:54 +02:00
Tarik Moussa
a140f439a6
README.md
2026-02-09 20:05:35 +02:00
user2595
a0dbdb8818
Initial commit
2026-02-09 18:39:03 +01:00