AN INTERACTIVE PRIMER 01 / ISOLINES

Finding the line.
Keeping the possibilities.

How do you build a contour when the rest of the map hasn't arrived yet? A hands-on guide to cells, tiles and the unfinished paths between them.

01 / THE BUILDING BLOCK

From values to a line.

An isoline connects locations with the same scalar value: pressure, elevation or temperature. We know the values at grid samples, but we need to find where the chosen level passes between them.

Our extractor is CONREC. It adds the arithmetic-mean centre to a cell, splits the square into four triangles and intersects each triangle with the level. This is not the same interpolation model as bilinear marching squares.

LIVE CELL EXPLORERActual CONREC

Try this: move the contour level through zero. With alternating corner signs, the centre itself lies on the level. A junction can appear; choosing how to walk through it is a different problem from extracting its segments.

02 / INCOMPLETE CONTEXT

A map arrives in pieces.

Web maps receive tiles independently. A contour ending near a tile edge might be unfinished because its neighbour is absent—not because the field ends there.

The tile builder uses one sample of real neighbouring context. A whole cell belongs to the tile containing its top-left sample. If a required sample is unavailable, that cell waits. There is no invented bridge, clipped contour or copied edge value.

Watch the tiles arriveStep through ERA5 mean sea-level pressure tiles.↗
03 / DEFERRED CHOICES

More than one way forward.

When a path reaches several eligible continuations, LoopLook can retain alternative versions. They share their earlier history. A later return to an earlier vertex reveals a candidate loop.

Extracting that loop removes its outside tail from that version only. The source segments remain available to other versions. This is the central idea in Professor Ramon Antonio's LoopLook sketch.

Explore surface pressureInspect candidates and junctions in the ERA5 field.↗

A hypothesis, not a guarantee. Branching explores alternatives; it does not make them scientifically correct. The manuscript's expanded deterministic replay comparison recovers the same accepted boundaries on its six original pressure cases. That result does not establish a boundary-recovery advantage for branching.

04 / SELECTION & ABSTENTION

A loop is not enough.

A geometrically valid ring can still be unsupported by the scalar field or share source edges with competing candidates. The bounded-side convention checks local interior-side evidence for hills and depressions. Unknown or conflicting candidates stay withheld, with their edges retained as residual linework.

Before declared tile coverage is complete, accepted rings are provisional. Even afterward, a closed boundary is not a certificate for its entire interior, a shell/hole interpretation or every critical-level ambiguity.

Accepted boundary Residual source edge Competing continuation
05 / YOUR TURN

Less reading.
More experimenting.

Change the arrival order, remove a tile, then restore it. Inspect an amber junction or a candidate boundary to see the engine's actual diagnostics. Export the current geometry—not a pre-rendered animation.

Open the playground ↗

Browser interface · Web Worker computation · existing CONREC and persistent LoopLook engines

THE INTERACTIVE LAB

Isolines, in the making.

Arrive. Explore. Revise. Watch the real construction engine at work.

LIVE BROWSER ENGINE
Waiting for source
▦The field is waiting.Press Step to deliver the first tile.
STEP 00

Starting the browser engine…

0%

Reading the result. Teal rings are accepted boundaries, not certified scalar regions. Missing support and unresolved geometry remain gray. Both ERA5 fields use bounded-side evidence. Methods & limitations ↗

RESEARCH COMPANION / METHODS

What this shows.
What it doesn't.

A real engine, not a movie.

Every Step, replacement, eviction and restoration calls the repository's existing persistent LoopLook implementation. Numeric examples go through TopologyAwareStripBuilder with assemblyMode: 'looplook', whole-cell ownership and real neighbouring samples. No closures are drawn by the interface unless returned by the engine.

Two ERA5 pressure fields.

  • Mean sea-level pressure (MSL): pressure reduced to mean sea level, displayed at 101194.7475 Pa. The source is the repository's src/tools/visualize/msl.csv.
  • Surface pressure (SP): pressure at the surface, displayed at 95000 Pa. Unlike MSL, this field reflects the lower pressure of elevated terrain. The source is dataset/two/sp.csv.

Both examples use 46 × 90 point samples, taken at stride 16 from 721 × 1440 CSV grids. There is no averaging or filling. These reduced grids need not preserve original critical-level junctions and are not the paper's original-resolution benchmarks.

How to reproduce.

npm ci
npm run build:playground
# Publish the contents of build/playground/ to GitHub Pages
npm run playground
# Local static preview: http://localhost:4173

All computation runs on your device in a browser Web Worker. Node.js is needed only to build the static files, not to host or use them. There are no API calls, CDN libraries, map-tile requests or external fonts. Each tab owns its construction state; reloading resets it. This demo is not a browser performance benchmark.

Interpretation matters.

Branching is a supervisor-proposed mechanism for deferred continuation. It is related to branching search and multiple-hypothesis tracking, but those analogies do not establish its origin or necessity. The manuscript reports a null accepted-boundary ablation for no-branch replay on the six original pressure cases. This interface does not claim to overturn that result.

Accepted boundaries are provisional before declared tile completion. Completion of tile presence is not proof of finite-data completeness. Unknown evidence and shared-edge conflicts can prevent acceptance; residual source edges remain visible. General shell/hole interpretation and automatic shared-edge decomposition are not supplied by this demo.

Source trail.

src/tools/playground/ contains this companion. The engine lives in src/core/incrementalLoopLook.js; scalar selection in src/core/loopLookEvidence.js; extraction in src/core/conrec.js. The accompanying manuscript is algorithm_improvement_notes/ambiguity_resolution/looplook_manuscript.tex.

Dataset: C3S ERA5 hourly single-level data. The bundled sample records its source-file SHA-256; the original MSL export timestamp remains unverified. CONREC: Paul Bourke, 1987.

Back to the playground ↗