Phase 2c: eclipse/overpass calculators + live-map camera polish #3

Merged
Arnike merged 1 commits from phase-2c into main 2026-06-02 20:47:44 +00:00
Owner

Calculators (apps/live-map/src/calculators/):

  • eclipse.ts: findEclipseWindows(bodies, opts) — coarse scan with
    threshold-crossing detection, bisection to refine start/end,
    ternary search to find peak. Handles eclipse already in progress
    at scan-start. Uses sun = parentId===null body.
  • overpass.ts: findOverpasses(opts) — coarse scan for local distance
    minima, ternary refinement. Targets: vessel, body, ground station
    (lat/lon/alt → heliocentric).

UI:

  • panels/CalculatorsPanel.tsx: collapsible bottom-center panel with
    two tabs. Eclipse form: observer, eclipser, from UT → 3 windows.
    Overpass form: observer vessel, target kind+id, max dist → 5 passes.
  • timeFormat.ts: shared KSP-time formatters.

Live-map camera polish (apps/live-map/src/scene/):

  • camera.ts: CameraController — log-scale distance (z→exp(z)*1e8 m,
    range -3..12), spherical orbit around target, smooth lerp to
    selected body/vessel. Mouse wheel zooms, drag rotates, click
    raycasts for track toggle. Pointer-move-distance gate to
    distinguish click from drag.
  • glow.ts: additive shader-based atmospheric halo (rim-falloff
    fragment shader, BackSide) attached as child of body mesh.
  • layout.ts: bodyPositionAt now returns true heliocentric (walks
    parent chain); previous version returned parent-relative for
    non-root children which broke the eclipse calculator.

Bug fix:

  • packages/orbital-math/src/occultation.ts: sign of projection check
    was inverted. proj <= 0 correctly returns 0 (occluder behind
    observer), proj > 0 triggers eclipse computation.

Tests: 28 live-map tests (10 scene + 12 calculator + 6 camera),
45 total across the workspace, all passing.

Calculators (apps/live-map/src/calculators/): - eclipse.ts: findEclipseWindows(bodies, opts) — coarse scan with threshold-crossing detection, bisection to refine start/end, ternary search to find peak. Handles eclipse already in progress at scan-start. Uses sun = parentId===null body. - overpass.ts: findOverpasses(opts) — coarse scan for local distance minima, ternary refinement. Targets: vessel, body, ground station (lat/lon/alt → heliocentric). UI: - panels/CalculatorsPanel.tsx: collapsible bottom-center panel with two tabs. Eclipse form: observer, eclipser, from UT → 3 windows. Overpass form: observer vessel, target kind+id, max dist → 5 passes. - timeFormat.ts: shared KSP-time formatters. Live-map camera polish (apps/live-map/src/scene/): - camera.ts: CameraController — log-scale distance (z→exp(z)*1e8 m, range -3..12), spherical orbit around target, smooth lerp to selected body/vessel. Mouse wheel zooms, drag rotates, click raycasts for track toggle. Pointer-move-distance gate to distinguish click from drag. - glow.ts: additive shader-based atmospheric halo (rim-falloff fragment shader, BackSide) attached as child of body mesh. - layout.ts: bodyPositionAt now returns true heliocentric (walks parent chain); previous version returned parent-relative for non-root children which broke the eclipse calculator. Bug fix: - packages/orbital-math/src/occultation.ts: sign of projection check was inverted. `proj <= 0` correctly returns 0 (occluder behind observer), `proj > 0` triggers eclipse computation. Tests: 28 live-map tests (10 scene + 12 calculator + 6 camera), 45 total across the workspace, all passing.
Arnike added 1 commit 2026-06-02 20:40:40 +00:00
Phase 2c: eclipse/overpass calculators + live-map camera polish
CI / Lint, typecheck, test, build (pull_request) Failing after 9s
07cc5321d1
Calculators (apps/live-map/src/calculators/):
- eclipse.ts: findEclipseWindows(bodies, opts) — coarse scan with
  threshold-crossing detection, bisection to refine start/end,
  ternary search to find peak. Handles eclipse already in progress
  at scan-start. Uses sun = parentId===null body.
- overpass.ts: findOverpasses(opts) — coarse scan for local distance
  minima, ternary refinement. Targets: vessel, body, ground station
  (lat/lon/alt → heliocentric).

UI:
- panels/CalculatorsPanel.tsx: collapsible bottom-center panel with
  two tabs. Eclipse form: observer, eclipser, from UT → 3 windows.
  Overpass form: observer vessel, target kind+id, max dist → 5 passes.
- timeFormat.ts: shared KSP-time formatters.

Live-map camera polish (apps/live-map/src/scene/):
- camera.ts: CameraController — log-scale distance (z→exp(z)*1e8 m,
  range -3..12), spherical orbit around target, smooth lerp to
  selected body/vessel. Mouse wheel zooms, drag rotates, click
  raycasts for track toggle. Pointer-move-distance gate to
  distinguish click from drag.
- glow.ts: additive shader-based atmospheric halo (rim-falloff
  fragment shader, BackSide) attached as child of body mesh.
- layout.ts: bodyPositionAt now returns true heliocentric (walks
  parent chain); previous version returned parent-relative for
  non-root children which broke the eclipse calculator.

Bug fix:
- packages/orbital-math/src/occultation.ts: sign of projection check
  was inverted. `proj <= 0` correctly returns 0 (occluder behind
  observer), `proj > 0` triggers eclipse computation.

Tests: 28 live-map tests (10 scene + 12 calculator + 6 camera),
45 total across the workspace, all passing.
Arnike merged commit b1feea3e6b into main 2026-06-02 20:47:44 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Arnike/KSP-MissionControl#3