Skip to content

Bound the reachable latitude of a design on the ellipsoid - #1

Open
Eelis03 wants to merge 3 commits into
mainfrom
feat/coverage-envelope
Open

Eelis03 wants to merge 3 commits into
mainfrom
feat/coverage-envelope

Conversation

@Eelis03

@Eelis03 Eelis03 commented Aug 4, 2026

Copy link
Copy Markdown
Owner

The highest latitude a Walker pattern can cover is a property of its geometry rather than of the window it is swept over, because the inclination has no secular rate in this propagator. coverage_envelope returns that bound, solved on the ellipsoid with Brent's method, together with the footprint share and the closed-form mean number of satellites in view that follows from it. The spherical form the README quoted, the inclination plus the Earth central angle, is not conservative on an oblate Earth: it gives 71.658 degrees for the 53 degree delta at 780 km against 72.011, and on the 2000 cell grid those two land either side of a whole collar of cells, so it calls 126 cells unreachable where 78 are. 78 is what the 24 hour sweep measures, and what the new bound predicts exactly.

  • algorithm/envelope.py: CoverageEnvelope and coverage_envelope, with unreachable_cells for a grid and reaches_the_poles. A retrograde inclination is folded onto its supplement, so 98.6 degrees reaches what 81.4 does rather than claiming the pole.
  • tests/test_envelope.py: 76 tests. The bound collapses to the published closed form on a sphere across four altitudes, four inclinations and four masks; a ground point at the bound sees the satellite at exactly the mask; the excluded area matches a quadrature of the ellipsoidal area element; and no cell outside the envelope is ever covered by a swept trace.
  • examples/analyse_design.py: reports the reachable latitude, the excluded area, and the cells outside the envelope, replacing the closed forms it computed inline. For delta-53 it prints 78 cells outside the envelope against 78 never covered.
  • README.md and docs/design-notes.md: the 71.7 and 77.0 degree figures corrected to 72.0 and 77.3, with a paragraph and a method note on why the spherical form is not a bound.

Gates: 346 tests pass, coverage 99.11 percent against the 96 percent floor, ruff check . and mypy clean.

🤖 Generated with Claude Code

emreyilmaz-dev and others added 3 commits August 5, 2026 00:05
The highest latitude a pattern can cover is a property of its geometry, not
of the window it is swept over: the inclination has no secular rate here, so
every satellite stays inside the turning latitude of its ground track for
ever. `coverage_envelope` solves that bound with Brent's method on the
ellipsoid and returns it with the footprint share and the closed-form mean
number of satellites in view.

The spherical form the README quoted, the inclination plus the Earth central
angle, is not conservative on an oblate Earth. It gives 71.658 degrees for
the 53 degree delta at 780 km against 72.011, and on the 2000 cell grid those
two land either side of a whole collar: it calls 126 cells unreachable where
78 are, and 78 is what the 24 hour sweep measures. The figures the README and
the design notes quote are corrected to the ellipsoidal ones.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
main gained a ruff format gate while this branch was open, so the branch is
merged up and run through the formatter to match. Behaviour is untouched: the
suite passes as before and nothing the pull request claims has moved.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants