Skip to content

Topology simulator

TopoScope

Persistent homology, live - computing the shape of data from a raw, noisy point cloud. Grow a ball of radius r around 24 scattered points and the connectivity keeps changing; TopoScope reports the Betti numbers at every step and catches the moment a genuine hole appears, then vanishes.

The point cloud - a noisy ring with a genuine hole
hole

24 points jittered around a unit circle. The empty centre is a real topological feature, not a drawing choice - the library has to find it.

Live run output deterministic - seed 42

Verbatim console output of KullGames.TopoScope built on OnlyCSharp 1.8 (net10.0):

  KULLGAMES TOPOSCOPE -- persistent homology via Vietoris-Rips filtration
  powered by OnlyCSharp 1.8 -- Mathematics.Geometry.Topology (VietorisRips + Betti)
  ==============================================================================
  Point cloud: 24 points jittered around a unit circle (seed=42, jitter=+/-0.12)
  ==============================================================================

  Filtration built: 278 distinct radius steps from r=0 to r=2.3.

   radius |   V   E    F  | b0  b1  | what's happening
  --------+---------------+---------+-------------------------------------------------
    0.05 |  24   0    0  | 24   0  | all alone: every point is its own island
    0.20 |  24   4    0  | 20   0  | nearest neighbors link into short arcs
    0.40 |  24  21    2  |  5   0  | arcs have merged into a few big clusters
    0.55 |  24  38   14  |  1   1  | RING CLOSES: one component + one loop -> a hole is detected
    1.20 |  24 108  193  |  1   1  | the hole survives as more (short) chords are added
    1.80 |  24 197  750  |  1   0  | enough triangles now tile the interior -> the hole is gone
    2.30 |  24 276 2024  |  1   0  | fully filled 2-skeleton: a topologically trivial blob

  Automatic transition scan (every one of the filtration's own steps -- nothing hand-picked):
    single connected component (b0=1) first at r = 0.4175
    loop DETECTED (b1>=1)           first at r = 0.4193
    loop CLOSES back up (b1=0)      first at r = 1.7003

The library detects the ring's hole (b1=1) once the balls overlap into a single loop, and watches it close again (b1=0) as filled triangles tile the interior - the persistent-homology story for a noisy ring, all computed, none assumed.