feat: add comprehensive orbit specification library with 16 new specifications
BREAKING CHANGE: GeostationaryOrbitTleSpecification now requires low inclination
and circular orbit in addition to synchronous period. Use GeosynchronousOrbitTleSpecification
for the previous behavior (period-only check).
Bug Fixes
- Fix Tle::angularPrecessionPerOrbit() passing degrees to cos() instead of radians
- Update SunSynchronousOrbitTleSpecification comment (bug was fixed in Tle class)
New Specifications
Altitude-Based
- LowEarthOrbitTleSpecification (160-2,000 km)
- MediumEarthOrbitTleSpecification (2,000-35,786 km)
- HighEarthOrbitTleSpecification (>35,786 km apogee)
Eccentricity-Based
- CircularOrbitTleSpecification (e < threshold)
- EllipticalOrbitTleSpecification (e >= threshold)
Special Orbits
- MolniyaOrbitTleSpecification (~63.4° inclination, ~0.74 eccentricity, ~12h period)
- TundraOrbitTleSpecification (~63.4° inclination, ~0.27 eccentricity, ~24h period)
- CriticalInclinationOrbitTleSpecification (63.4° or 116.6°)
- GeosynchronousOrbitTleSpecification (~24h period, any inclination/eccentricity)
Temporal
- RecentTleTleSpecification (TLE freshness check)
- OrbitalPeriodTleSpecification (period range filter)
Decay & Stability
- DecayingOrbitTleSpecification (positive mean motion derivative)
- LowDragTleSpecification (low BSTAR coefficient)
Classification
- ClassifiedSatelliteTleSpecification (C or S classification)
- UnclassifiedSatelliteTleSpecification (U classification)
Composite (Specification Pattern)
- AndTleSpecification (all must match)
- OrTleSpecification (any must match)
- NotTleSpecification (invert result)
Tle Model Enhancements
- Add perigeeAltitude() method
- Add apogeeAltitude() method
- Add firstDerivativeMeanMotion() method
- Add bstarFloat() method (parse BSTAR as float)
Tests
- Add negative tests for all existing specifications
- Add comprehensive tests for all new specifications
- Add composite specification integration tests