ootk 5.1.0 → 6.0.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/PROMPT.md +13 -0
- package/.claude/hooks/post-tool-use.ts +33 -0
- package/.claude/hooks/user-prompt-submit.ts +138 -0
- package/.claude/settings.local.json +13 -0
- package/.claude/skill-rules.json +11 -0
- package/.claude/skills/ootk-dev/SKILL.md +16 -0
- package/ADVANCED_FEATURES_GUIDE.md +1025 -0
- package/CHANGELOG.md +42 -3
- package/README.md +77 -45
- package/dist/body/Celestial.d.ts +2 -2
- package/dist/body/Celestial.js +2 -2
- package/dist/body/Celestial.js.map +1 -1
- package/dist/body/Earth.d.ts +4 -4
- package/dist/body/Earth.js +2 -2
- package/dist/body/Earth.js.map +1 -1
- package/dist/body/Moon.d.ts +3 -3
- package/dist/body/Moon.js +7 -7
- package/dist/body/Moon.js.map +1 -1
- package/dist/body/NutationAngles.d.ts +2 -2
- package/dist/body/NutationAngles.js +1 -1
- package/dist/body/PrecessionAngles.d.ts +2 -2
- package/dist/body/PrecessionAngles.js +1 -1
- package/dist/body/Sun.d.ts +2 -2
- package/dist/body/Sun.js +3 -3
- package/dist/body/Sun.js.map +1 -1
- package/dist/body/index.d.ts +5 -5
- package/dist/body/index.js +5 -5
- package/dist/body/index.js.map +1 -1
- package/dist/conjunction/ConjunctionAssessment.d.ts +156 -0
- package/dist/conjunction/ConjunctionAssessment.js +281 -0
- package/dist/conjunction/ConjunctionAssessment.js.map +1 -0
- package/dist/conjunction/ConjunctionEvent.d.ts +104 -0
- package/dist/conjunction/ConjunctionEvent.js +156 -0
- package/dist/conjunction/ConjunctionEvent.js.map +1 -0
- package/dist/conjunction/ProbabilityOfCollision.d.ts +102 -0
- package/dist/conjunction/ProbabilityOfCollision.js +240 -0
- package/dist/conjunction/ProbabilityOfCollision.js.map +1 -0
- package/dist/conjunction/index.d.ts +19 -0
- package/dist/conjunction/index.js +20 -0
- package/dist/conjunction/index.js.map +1 -0
- package/dist/coordinate/ClassicalElements.d.ts +7 -7
- package/dist/coordinate/ClassicalElements.js +7 -7
- package/dist/coordinate/ClassicalElements.js.map +1 -1
- package/dist/coordinate/EquinoctialElements.d.ts +5 -5
- package/dist/coordinate/EquinoctialElements.js +4 -4
- package/dist/coordinate/EquinoctialElements.js.map +1 -1
- package/dist/coordinate/FormatTle.d.ts +2 -2
- package/dist/coordinate/FormatTle.js +2 -2
- package/dist/coordinate/FormatTle.js.map +1 -1
- package/dist/coordinate/Geodetic.d.ts +4 -4
- package/dist/coordinate/Geodetic.js +7 -7
- package/dist/coordinate/Geodetic.js.map +1 -1
- package/dist/coordinate/Hill.d.ts +4 -4
- package/dist/coordinate/Hill.js +3 -3
- package/dist/coordinate/Hill.js.map +1 -1
- package/dist/coordinate/ITRF.d.ts +5 -5
- package/dist/coordinate/ITRF.js +6 -5
- package/dist/coordinate/ITRF.js.map +1 -1
- package/dist/coordinate/J2000.d.ts +5 -5
- package/dist/coordinate/J2000.js +5 -5
- package/dist/coordinate/J2000.js.map +1 -1
- package/dist/coordinate/RIC.d.ts +4 -4
- package/dist/coordinate/RIC.js +3 -3
- package/dist/coordinate/RIC.js.map +1 -1
- package/dist/coordinate/RelativeState.d.ts +5 -5
- package/dist/coordinate/RelativeState.js +2 -2
- package/dist/coordinate/RelativeState.js.map +1 -1
- package/dist/coordinate/StateVector.d.ts +2 -2
- package/dist/coordinate/StateVector.js +2 -2
- package/dist/coordinate/StateVector.js.map +1 -1
- package/dist/coordinate/TEME.d.ts +4 -4
- package/dist/coordinate/TEME.js +4 -4
- package/dist/coordinate/TEME.js.map +1 -1
- package/dist/coordinate/Tle.d.ts +5 -5
- package/dist/coordinate/Tle.js +9 -9
- package/dist/coordinate/Tle.js.map +1 -1
- package/dist/coordinate/index.d.ts +12 -12
- package/dist/coordinate/index.js +12 -12
- package/dist/coordinate/index.js.map +1 -1
- package/dist/coordinate/tle-format-data.d.ts +1 -1
- package/dist/coordinate/tle-format-data.js +1 -1
- package/dist/covariance/CovarianceSample.d.ts +5 -5
- package/dist/covariance/CovarianceSample.js +5 -5
- package/dist/covariance/CovarianceSample.js.map +1 -1
- package/dist/covariance/StateCovariance.d.ts +2 -2
- package/dist/covariance/StateCovariance.js +2 -2
- package/dist/covariance/StateCovariance.js.map +1 -1
- package/dist/covariance/index.d.ts +2 -2
- package/dist/covariance/index.js +2 -2
- package/dist/covariance/index.js.map +1 -1
- package/dist/data/DataHandler.d.ts +4 -4
- package/dist/data/DataHandler.js +5 -5
- package/dist/data/DataHandler.js.map +1 -1
- package/dist/data/values/Egm96Data.d.ts +1 -1
- package/dist/data/values/Egm96Data.js +3 -3
- package/dist/data/values/Egm96Data.js.map +1 -1
- package/dist/data/values/HpAtmosphereData.d.ts +2 -2
- package/dist/data/values/HpAtmosphereData.js +3 -3
- package/dist/data/values/HpAtmosphereData.js.map +1 -1
- package/dist/data/values/HpAtmosphereResult.d.ts +2 -2
- package/dist/data/values/HpAtmosphereResult.js +1 -1
- package/dist/data/values/Iau1980Data.d.ts +1 -1
- package/dist/data/values/Iau1980Data.js +2 -2
- package/dist/data/values/Iau1980Data.js.map +1 -1
- package/dist/data/values/LeapSecond.d.ts +1 -1
- package/dist/data/values/LeapSecond.js +1 -1
- package/dist/data/values/LeapSecondData.d.ts +2 -2
- package/dist/data/values/LeapSecondData.js +2 -2
- package/dist/data/values/LeapSecondData.js.map +1 -1
- package/dist/data/values/egm96.d.ts +2 -2
- package/dist/data/values/egm96.js +1 -1
- package/dist/data/values/hpAtmosphere.d.ts +2 -2
- package/dist/data/values/hpAtmosphere.js +1 -1
- package/dist/data/values/iau1980.d.ts +2 -2
- package/dist/data/values/iau1980.js +1 -1
- package/dist/enums/AngularDiameterMethod.d.ts +1 -1
- package/dist/enums/AngularDiameterMethod.js +1 -1
- package/dist/enums/AngularDistanceMethod.d.ts +1 -1
- package/dist/enums/AngularDistanceMethod.js +1 -1
- package/dist/enums/OrbitRegime.d.ts +1 -1
- package/dist/enums/OrbitRegime.js +1 -1
- package/dist/enums/PassType.d.ts +1 -1
- package/dist/enums/PassType.js +1 -1
- package/dist/enums/Sgp4OpsMode.d.ts +1 -1
- package/dist/enums/Sgp4OpsMode.js +1 -1
- package/dist/enums/index.d.ts +7 -7
- package/dist/enums/index.js +7 -7
- package/dist/enums/index.js.map +1 -1
- package/dist/fetch/horizons-constants.d.ts +43 -0
- package/dist/fetch/horizons-constants.js +50 -0
- package/dist/fetch/horizons-constants.js.map +1 -0
- package/dist/fetch/horizons-interfaces.d.ts +37 -0
- package/dist/fetch/horizons-interfaces.js +2 -0
- package/dist/fetch/horizons-interfaces.js.map +1 -0
- package/dist/fetch/horizons.d.ts +86 -0
- package/dist/fetch/horizons.js +237 -0
- package/dist/fetch/horizons.js.map +1 -0
- package/dist/force/AtmosphericDrag.d.ts +3 -3
- package/dist/force/AtmosphericDrag.js +2 -2
- package/dist/force/AtmosphericDrag.js.map +1 -1
- package/dist/force/EarthGravity.d.ts +3 -3
- package/dist/force/EarthGravity.js +2 -2
- package/dist/force/EarthGravity.js.map +1 -1
- package/dist/force/Force.d.ts +3 -3
- package/dist/force/Force.js +1 -10
- package/dist/force/Force.js.map +1 -1
- package/dist/force/ForceModel.d.ts +3 -3
- package/dist/force/ForceModel.js +7 -7
- package/dist/force/ForceModel.js.map +1 -1
- package/dist/force/Gravity.d.ts +3 -3
- package/dist/force/Gravity.js +2 -2
- package/dist/force/Gravity.js.map +1 -1
- package/dist/force/SolarRadiationPressure.d.ts +3 -3
- package/dist/force/SolarRadiationPressure.js +4 -4
- package/dist/force/SolarRadiationPressure.js.map +1 -1
- package/dist/force/ThirdBodyGravity.d.ts +3 -3
- package/dist/force/ThirdBodyGravity.js +2 -2
- package/dist/force/ThirdBodyGravity.js.map +1 -1
- package/dist/force/Thrust.d.ts +3 -3
- package/dist/force/Thrust.js +2 -2
- package/dist/force/Thrust.js.map +1 -1
- package/dist/force/index.d.ts +1 -1
- package/dist/force/index.js +1 -1
- package/dist/force/index.js.map +1 -1
- package/dist/interfaces/BaseObjectParams.d.ts +2 -2
- package/dist/interfaces/BaseObjectParams.js +1 -1
- package/dist/interfaces/ClassicalElementsParams.d.ts +2 -2
- package/dist/interfaces/ClassicalElementsParams.js +1 -1
- package/dist/interfaces/EquinoctialElementsParams.d.ts +2 -2
- package/dist/interfaces/EquinoctialElementsParams.js +1 -1
- package/dist/interfaces/GroundPositionParams.d.ts +2 -2
- package/dist/interfaces/GroundPositionParams.js +1 -1
- package/dist/interfaces/RfSensorParams.d.ts +2 -2
- package/dist/interfaces/SatelliteParams.d.ts +2 -2
- package/dist/interfaces/SensorParams.d.ts +2 -2
- package/dist/interfaces/StarObjectParams.d.ts +1 -1
- package/dist/interfaces/TimeVariables.d.ts +1 -1
- package/dist/interfaces/index.d.ts +9 -9
- package/dist/interpolator/ChebyshevCoefficients.d.ts +2 -2
- package/dist/interpolator/ChebyshevCoefficients.js +2 -2
- package/dist/interpolator/ChebyshevCoefficients.js.map +1 -1
- package/dist/interpolator/ChebyshevInterpolator.d.ts +4 -4
- package/dist/interpolator/ChebyshevInterpolator.js +3 -3
- package/dist/interpolator/ChebyshevInterpolator.js.map +1 -1
- package/dist/interpolator/CubicSpline.d.ts +2 -2
- package/dist/interpolator/CubicSpline.js +1 -1
- package/dist/interpolator/CubicSplineInterpolator.d.ts +4 -4
- package/dist/interpolator/CubicSplineInterpolator.js +4 -4
- package/dist/interpolator/CubicSplineInterpolator.js.map +1 -1
- package/dist/interpolator/FieldInterpolator.d.ts +3 -3
- package/dist/interpolator/FieldInterpolator.js +2 -12
- package/dist/interpolator/FieldInterpolator.js.map +1 -1
- package/dist/interpolator/Interpolator.d.ts +2 -2
- package/dist/interpolator/Interpolator.js +2 -2
- package/dist/interpolator/Interpolator.js.map +1 -1
- package/dist/interpolator/LagrangeInterpolator.d.ts +3 -3
- package/dist/interpolator/LagrangeInterpolator.js +3 -3
- package/dist/interpolator/LagrangeInterpolator.js.map +1 -1
- package/dist/interpolator/StateInterpolator.d.ts +4 -4
- package/dist/interpolator/StateInterpolator.js +2 -10
- package/dist/interpolator/StateInterpolator.js.map +1 -1
- package/dist/interpolator/VerletBlendInterpolator.d.ts +5 -5
- package/dist/interpolator/VerletBlendInterpolator.js +5 -5
- package/dist/interpolator/VerletBlendInterpolator.js.map +1 -1
- package/dist/main.d.ts +20 -20
- package/dist/main.js +21 -20
- package/dist/main.js.map +1 -1
- package/dist/maneuver/TwoBurnOrbitTransfer.d.ts +3 -3
- package/dist/maneuver/TwoBurnOrbitTransfer.js +3 -3
- package/dist/maneuver/TwoBurnOrbitTransfer.js.map +1 -1
- package/dist/maneuver/Waypoint.d.ts +5 -5
- package/dist/maneuver/Waypoint.js +7 -7
- package/dist/maneuver/Waypoint.js.map +1 -1
- package/dist/objects/BaseObject.d.ts +3 -3
- package/dist/objects/BaseObject.js +2 -2
- package/dist/objects/BaseObject.js.map +1 -1
- package/dist/objects/DetailedSatellite.d.ts +4 -4
- package/dist/objects/DetailedSatellite.js +4 -4
- package/dist/objects/DetailedSatellite.js.map +1 -1
- package/dist/objects/DetailedSensor.d.ts +5 -5
- package/dist/objects/DetailedSensor.js +2 -2
- package/dist/objects/DetailedSensor.js.map +1 -1
- package/dist/objects/GroundObject.d.ts +4 -4
- package/dist/objects/GroundObject.js +3 -3
- package/dist/objects/GroundObject.js.map +1 -1
- package/dist/objects/LandObject.d.ts +3 -3
- package/dist/objects/LandObject.js +2 -2
- package/dist/objects/LandObject.js.map +1 -1
- package/dist/objects/Marker.d.ts +2 -2
- package/dist/objects/Marker.js +2 -2
- package/dist/objects/Marker.js.map +1 -1
- package/dist/objects/RfSensor.d.ts +2 -2
- package/dist/objects/RfSensor.js +2 -2
- package/dist/objects/RfSensor.js.map +1 -1
- package/dist/objects/Satellite.d.ts +12 -12
- package/dist/objects/Satellite.js +14 -14
- package/dist/objects/Satellite.js.map +1 -1
- package/dist/objects/Sensor.d.ts +6 -6
- package/dist/objects/Sensor.js +5 -5
- package/dist/objects/Sensor.js.map +1 -1
- package/dist/objects/Star.d.ts +3 -3
- package/dist/objects/Star.js +3 -3
- package/dist/objects/Star.js.map +1 -1
- package/dist/objects/index.d.ts +10 -10
- package/dist/objects/index.js +10 -10
- package/dist/objects/index.js.map +1 -1
- package/dist/observation/Observation.d.ts +11 -11
- package/dist/observation/Observation.js +1 -52
- package/dist/observation/Observation.js.map +1 -1
- package/dist/observation/ObservationOptical.d.ts +6 -6
- package/dist/observation/ObservationOptical.js +4 -4
- package/dist/observation/ObservationOptical.js.map +1 -1
- package/dist/observation/ObservationRadar.d.ts +6 -6
- package/dist/observation/ObservationRadar.js +4 -4
- package/dist/observation/ObservationRadar.js.map +1 -1
- package/dist/observation/ObservationUtils.d.ts +2 -2
- package/dist/observation/ObservationUtils.js +2 -2
- package/dist/observation/ObservationUtils.js.map +1 -1
- package/dist/observation/PropagatorPairs.d.ts +2 -2
- package/dist/observation/PropagatorPairs.js +1 -1
- package/dist/observation/RAE.d.ts +6 -6
- package/dist/observation/RAE.js +6 -6
- package/dist/observation/RAE.js.map +1 -1
- package/dist/observation/RadecGeocentric.d.ts +6 -6
- package/dist/observation/RadecGeocentric.js +5 -5
- package/dist/observation/RadecGeocentric.js.map +1 -1
- package/dist/observation/RadecTopocentric.d.ts +6 -6
- package/dist/observation/RadecTopocentric.js +9 -7
- package/dist/observation/RadecTopocentric.js.map +1 -1
- package/dist/observation/index.d.ts +5 -5
- package/dist/observation/index.js +5 -5
- package/dist/observation/index.js.map +1 -1
- package/dist/operations/BoxMuller.d.ts +2 -2
- package/dist/operations/BoxMuller.js +2 -2
- package/dist/operations/BoxMuller.js.map +1 -1
- package/dist/operations/EulerAngles.d.ts +2 -2
- package/dist/operations/EulerAngles.js +2 -2
- package/dist/operations/EulerAngles.js.map +1 -1
- package/dist/operations/Matrix.d.ts +2 -2
- package/dist/operations/Matrix.js +2 -2
- package/dist/operations/Matrix.js.map +1 -1
- package/dist/operations/Quaternion.d.ts +2 -2
- package/dist/operations/Quaternion.js +2 -2
- package/dist/operations/Quaternion.js.map +1 -1
- package/dist/operations/Random.d.ts +1 -1
- package/dist/operations/Random.js +1 -1
- package/dist/operations/RandomGaussianSource.d.ts +2 -2
- package/dist/operations/RandomGaussianSource.js +3 -3
- package/dist/operations/RandomGaussianSource.js.map +1 -1
- package/dist/operations/Vector.d.ts +2 -2
- package/dist/operations/Vector.js +2 -2
- package/dist/operations/Vector.js.map +1 -1
- package/dist/operations/Vector3D.d.ts +5 -4
- package/dist/operations/Vector3D.js +5 -4
- package/dist/operations/Vector3D.js.map +1 -1
- package/dist/operations/index.d.ts +4 -4
- package/dist/operations/index.js +4 -4
- package/dist/operations/index.js.map +1 -1
- package/dist/operations/operations.d.ts +5 -5
- package/dist/operations/operations.js +5 -5
- package/dist/operations/operations.js.map +1 -1
- package/dist/optimize/ChebyshevCompressor.d.ts +3 -3
- package/dist/optimize/ChebyshevCompressor.js +4 -4
- package/dist/optimize/ChebyshevCompressor.js.map +1 -1
- package/dist/optimize/DownhillSimplex.d.ts +2 -2
- package/dist/optimize/DownhillSimplex.js +2 -2
- package/dist/optimize/DownhillSimplex.js.map +1 -1
- package/dist/optimize/GoldenSection.d.ts +2 -2
- package/dist/optimize/GoldenSection.js +1 -1
- package/dist/optimize/PolynomialRegression.d.ts +2 -2
- package/dist/optimize/PolynomialRegression.js +4 -4
- package/dist/optimize/PolynomialRegression.js.map +1 -1
- package/dist/optimize/PolynomicalRegressionResult.d.ts +1 -1
- package/dist/optimize/PolynomicalRegressionResult.js +1 -1
- package/dist/optimize/SimpleLinearRegression.d.ts +1 -1
- package/dist/optimize/SimpleLinearRegression.js +1 -1
- package/dist/optimize/SimplexEntry.d.ts +1 -1
- package/dist/optimize/SimplexEntry.js +2 -2
- package/dist/optimize/SimplexEntry.js.map +1 -1
- package/dist/orbit_determination/BatchLeastSquaresOD.d.ts +5 -5
- package/dist/orbit_determination/BatchLeastSquaresOD.js +8 -8
- package/dist/orbit_determination/BatchLeastSquaresOD.js.map +1 -1
- package/dist/orbit_determination/BatchLeastSquaresResult.d.ts +3 -3
- package/dist/orbit_determination/BatchLeastSquaresResult.js +1 -1
- package/dist/orbit_determination/GaussIOD.d.ts +98 -0
- package/dist/orbit_determination/GaussIOD.js +291 -0
- package/dist/orbit_determination/GaussIOD.js.map +1 -0
- package/dist/orbit_determination/GibbsIOD.d.ts +2 -2
- package/dist/orbit_determination/GibbsIOD.js +4 -4
- package/dist/orbit_determination/GibbsIOD.js.map +1 -1
- package/dist/orbit_determination/GoodingIOD.d.ts +58 -8
- package/dist/orbit_determination/GoodingIOD.js +225 -35
- package/dist/orbit_determination/GoodingIOD.js.map +1 -1
- package/dist/orbit_determination/HerrickGibbsIOD.d.ts +2 -2
- package/dist/orbit_determination/HerrickGibbsIOD.js +2 -2
- package/dist/orbit_determination/HerrickGibbsIOD.js.map +1 -1
- package/dist/orbit_determination/LambertIOD.d.ts +2 -2
- package/dist/orbit_determination/LambertIOD.js +2 -2
- package/dist/orbit_determination/LambertIOD.js.map +1 -1
- package/dist/orbit_determination/ModifiedGoodingIOD.d.ts +3 -3
- package/dist/orbit_determination/ModifiedGoodingIOD.js +8 -8
- package/dist/orbit_determination/ModifiedGoodingIOD.js.map +1 -1
- package/dist/orbit_determination/index.d.ts +7 -7
- package/dist/orbit_determination/index.js +7 -7
- package/dist/orbit_determination/index.js.map +1 -1
- package/dist/propagator/DormandPrince54Propagator.d.ts +2 -2
- package/dist/propagator/DormandPrince54Propagator.js +2 -2
- package/dist/propagator/DormandPrince54Propagator.js.map +1 -1
- package/dist/propagator/KeplerPropagator.d.ts +6 -6
- package/dist/propagator/KeplerPropagator.js +6 -7
- package/dist/propagator/KeplerPropagator.js.map +1 -1
- package/dist/propagator/Propagator.d.ts +5 -5
- package/dist/propagator/Propagator.js +5 -5
- package/dist/propagator/Propagator.js.map +1 -1
- package/dist/propagator/RkCheckpoint.d.ts +2 -2
- package/dist/propagator/RkCheckpoint.js +1 -1
- package/dist/propagator/RkResult.d.ts +2 -2
- package/dist/propagator/RkResult.js +1 -1
- package/dist/propagator/RungeKutta4Propagator.d.ts +6 -6
- package/dist/propagator/RungeKutta4Propagator.js +5 -5
- package/dist/propagator/RungeKutta4Propagator.js.map +1 -1
- package/dist/propagator/RungeKutta89Propagator.d.ts +2 -2
- package/dist/propagator/RungeKutta89Propagator.js +2 -2
- package/dist/propagator/RungeKutta89Propagator.js.map +1 -1
- package/dist/propagator/RungeKuttaAdaptive.d.ts +6 -6
- package/dist/propagator/RungeKuttaAdaptive.js +52 -9
- package/dist/propagator/RungeKuttaAdaptive.js.map +1 -1
- package/dist/propagator/Sgp4Propagator.d.ts +7 -7
- package/dist/propagator/Sgp4Propagator.js +4 -4
- package/dist/propagator/Sgp4Propagator.js.map +1 -1
- package/dist/propagator/index.d.ts +3 -3
- package/dist/propagator/index.js +3 -3
- package/dist/propagator/index.js.map +1 -1
- package/dist/sgp4/index.d.ts +2 -2
- package/dist/sgp4/index.js +2 -2
- package/dist/sgp4/index.js.map +1 -1
- package/dist/sgp4/sgp4.d.ts +3 -3
- package/dist/sgp4/sgp4.js +11 -5
- package/dist/sgp4/sgp4.js.map +1 -1
- package/dist/smoothing/ExponentialSmoothing.d.ts +2 -2
- package/dist/smoothing/ExponentialSmoothing.js +1 -1
- package/dist/time/Epoch.d.ts +2 -2
- package/dist/time/Epoch.js +2 -2
- package/dist/time/Epoch.js.map +1 -1
- package/dist/time/EpochGPS.d.ts +3 -3
- package/dist/time/EpochGPS.js +3 -3
- package/dist/time/EpochGPS.js.map +1 -1
- package/dist/time/EpochTAI.d.ts +2 -2
- package/dist/time/EpochTAI.js +2 -2
- package/dist/time/EpochTAI.js.map +1 -1
- package/dist/time/EpochTDB.d.ts +2 -2
- package/dist/time/EpochTDB.js +2 -2
- package/dist/time/EpochTDB.js.map +1 -1
- package/dist/time/EpochTT.d.ts +2 -2
- package/dist/time/EpochTT.js +2 -2
- package/dist/time/EpochTT.js.map +1 -1
- package/dist/time/EpochUTC.d.ts +7 -7
- package/dist/time/EpochUTC.js +9 -9
- package/dist/time/EpochUTC.js.map +1 -1
- package/dist/time/EpochWindow.d.ts +2 -2
- package/dist/time/EpochWindow.js +1 -1
- package/dist/time/TimeStamped.d.ts +2 -2
- package/dist/time/TimeStamped.js +1 -1
- package/dist/time/index.d.ts +8 -8
- package/dist/time/index.js +8 -8
- package/dist/time/index.js.map +1 -1
- package/dist/transforms/TransformCache.d.ts +1 -1
- package/dist/transforms/TransformCache.js +1 -1
- package/dist/transforms/conversions.d.ts +2 -2
- package/dist/transforms/conversions.js +2 -2
- package/dist/transforms/conversions.js.map +1 -1
- package/dist/transforms/index.d.ts +2 -2
- package/dist/transforms/index.js +2 -2
- package/dist/transforms/index.js.map +1 -1
- package/dist/transforms/transforms.d.ts +1 -1
- package/dist/transforms/transforms.js +1 -1
- package/dist/transforms/transforms.js.map +1 -1
- package/dist/types/types.d.ts +8 -3
- package/dist/types/types.js +6 -1
- package/dist/types/types.js.map +1 -1
- package/dist/utils/constants.d.ts +2 -2
- package/dist/utils/constants.js +1 -1
- package/dist/utils/constants.js.map +1 -1
- package/dist/utils/create-covariance-from-tle.d.ts +1 -1
- package/dist/utils/create-covariance-from-tle.js +1 -1
- package/dist/utils/create-covariance-from-tle.js.map +1 -1
- package/dist/utils/functions.d.ts +4 -4
- package/dist/utils/functions.js +9 -4
- package/dist/utils/functions.js.map +1 -1
- package/dist/utils/index.d.ts +5 -5
- package/dist/utils/index.js +5 -5
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/jacobian.d.ts +2 -2
- package/dist/utils/jacobian.js +1 -1
- package/dist/utils/jacobian.js.map +1 -1
- package/dist/utils/linearDistance.d.ts +1 -1
- package/docs/README.md +132 -0
- package/docs/getting-started.md +792 -0
- package/docs/lambert-satellite-integration-guide.md +766 -0
- package/docs/user-guide.md +1935 -0
- package/jest.config.mjs +28 -0
- package/package.json +3 -4
- package/src/body/Celestial.ts +2 -2
- package/src/body/Earth.ts +4 -4
- package/src/body/Moon.ts +7 -7
- package/src/body/NutationAngles.ts +2 -2
- package/src/body/PrecessionAngles.ts +2 -2
- package/src/body/Sun.ts +4 -4
- package/src/body/index.ts +6 -5
- package/src/conjunction/ConjunctionAssessment.ts +417 -0
- package/src/conjunction/ConjunctionEvent.ts +149 -0
- package/src/conjunction/ProbabilityOfCollision.ts +300 -0
- package/src/conjunction/index.ts +24 -0
- package/src/coordinate/ClassicalElements.ts +16 -11
- package/src/coordinate/EquinoctialElements.ts +7 -7
- package/src/coordinate/FormatTle.ts +2 -2
- package/src/coordinate/Geodetic.ts +8 -8
- package/src/coordinate/Hill.ts +4 -4
- package/src/coordinate/ITRF.ts +6 -6
- package/src/coordinate/J2000.ts +7 -7
- package/src/coordinate/RIC.ts +4 -4
- package/src/coordinate/RelativeState.ts +5 -5
- package/src/coordinate/StateVector.ts +8 -3
- package/src/coordinate/TEME.ts +6 -6
- package/src/coordinate/Tle.ts +9 -9
- package/src/coordinate/index.ts +13 -12
- package/src/coordinate/tle-format-data.ts +1 -1
- package/src/covariance/CovarianceSample.ts +13 -13
- package/src/covariance/StateCovariance.ts +2 -2
- package/src/covariance/index.ts +3 -2
- package/src/data/DataHandler.ts +6 -6
- package/src/data/values/Egm96Data.ts +3 -3
- package/src/data/values/HpAtmosphereData.ts +3 -3
- package/src/data/values/HpAtmosphereResult.ts +2 -2
- package/src/data/values/Iau1980Data.ts +2 -2
- package/src/data/values/LeapSecond.ts +1 -1
- package/src/data/values/LeapSecondData.ts +2 -2
- package/src/data/values/egm96.ts +2 -2
- package/src/data/values/hpAtmosphere.ts +2 -2
- package/src/data/values/iau1980.ts +2 -2
- package/src/enums/AngularDiameterMethod.ts +1 -1
- package/src/enums/AngularDistanceMethod.ts +1 -1
- package/src/enums/OrbitRegime.ts +1 -1
- package/src/enums/PassType.ts +1 -1
- package/src/enums/Sgp4OpsMode.ts +1 -1
- package/src/enums/index.ts +8 -7
- package/src/fetch/horizons-constants.ts +53 -0
- package/src/fetch/horizons-interfaces.ts +38 -0
- package/src/fetch/horizons.ts +300 -0
- package/src/force/AtmosphericDrag.ts +3 -3
- package/src/force/EarthGravity.ts +3 -3
- package/src/force/Force.ts +3 -5
- package/src/force/ForceModel.ts +9 -9
- package/src/force/Gravity.ts +3 -3
- package/src/force/SolarRadiationPressure.ts +4 -4
- package/src/force/ThirdBodyGravity.ts +3 -3
- package/src/force/Thrust.ts +3 -3
- package/src/force/index.ts +2 -1
- package/src/interfaces/BaseObjectParams.ts +2 -2
- package/src/interfaces/ClassicalElementsParams.ts +2 -2
- package/src/interfaces/EquinoctialElementsParams.ts +2 -2
- package/src/interfaces/GroundPositionParams.ts +2 -2
- package/src/interfaces/RfSensorParams.ts +2 -2
- package/src/interfaces/SatelliteParams.ts +2 -2
- package/src/interfaces/SensorParams.ts +3 -3
- package/src/interfaces/StarObjectParams.ts +1 -1
- package/src/interfaces/TimeVariables.ts +1 -1
- package/src/interfaces/index.ts +10 -9
- package/src/interpolator/ChebyshevCoefficients.ts +2 -2
- package/src/interpolator/ChebyshevInterpolator.ts +4 -4
- package/src/interpolator/CubicSpline.ts +2 -2
- package/src/interpolator/CubicSplineInterpolator.ts +4 -4
- package/src/interpolator/FieldInterpolator.ts +3 -5
- package/src/interpolator/Interpolator.ts +2 -2
- package/src/interpolator/LagrangeInterpolator.ts +3 -3
- package/src/interpolator/StateInterpolator.ts +4 -6
- package/src/interpolator/VerletBlendInterpolator.ts +5 -5
- package/src/main.ts +41 -20
- package/src/maneuver/TwoBurnOrbitTransfer.ts +3 -3
- package/src/maneuver/Waypoint.ts +8 -8
- package/src/objects/BaseObject.ts +3 -3
- package/src/objects/DetailedSatellite.ts +9 -9
- package/src/objects/DetailedSensor.ts +5 -5
- package/src/objects/GroundObject.ts +9 -9
- package/src/objects/LandObject.ts +3 -3
- package/src/objects/Marker.ts +2 -2
- package/src/objects/RfSensor.ts +2 -2
- package/src/objects/Satellite.ts +21 -21
- package/src/objects/Sensor.ts +7 -7
- package/src/objects/Star.ts +3 -3
- package/src/objects/index.ts +11 -10
- package/src/observation/Observation.ts +11 -23
- package/src/observation/ObservationOptical.ts +7 -7
- package/src/observation/ObservationRadar.ts +7 -7
- package/src/observation/ObservationUtils.ts +2 -2
- package/src/observation/PropagatorPairs.ts +2 -2
- package/src/observation/RAE.ts +9 -9
- package/src/observation/RadecGeocentric.ts +9 -9
- package/src/observation/RadecTopocentric.ts +13 -10
- package/src/observation/index.ts +6 -5
- package/src/operations/BoxMuller.ts +2 -2
- package/src/operations/EulerAngles.ts +2 -2
- package/src/operations/Matrix.ts +2 -2
- package/src/operations/Quaternion.ts +2 -2
- package/src/operations/Random.ts +1 -1
- package/src/operations/RandomGaussianSource.ts +3 -3
- package/src/operations/Vector.ts +2 -2
- package/src/operations/Vector3D.ts +6 -4
- package/src/operations/index.ts +5 -4
- package/src/operations/operations.ts +6 -5
- package/src/optimize/ChebyshevCompressor.ts +5 -5
- package/src/optimize/DownhillSimplex.ts +2 -2
- package/src/optimize/GoldenSection.ts +2 -2
- package/src/optimize/PolynomialRegression.ts +4 -4
- package/src/optimize/PolynomicalRegressionResult.ts +1 -1
- package/src/optimize/SimpleLinearRegression.ts +1 -1
- package/src/optimize/SimplexEntry.ts +2 -2
- package/src/orbit_determination/BatchLeastSquaresOD.ts +10 -10
- package/src/orbit_determination/BatchLeastSquaresResult.ts +3 -3
- package/src/orbit_determination/GaussIOD.ts +393 -0
- package/src/orbit_determination/GibbsIOD.ts +4 -4
- package/src/orbit_determination/GoodingIOD.ts +458 -160
- package/src/orbit_determination/HerrickGibbsIOD.ts +2 -2
- package/src/orbit_determination/LambertIOD.ts +2 -2
- package/src/orbit_determination/ModifiedGoodingIOD.ts +33 -22
- package/src/orbit_determination/index.ts +8 -7
- package/src/propagator/DormandPrince54Propagator.ts +2 -2
- package/src/propagator/KeplerPropagator.ts +7 -8
- package/src/propagator/Propagator.ts +6 -6
- package/src/propagator/RkCheckpoint.ts +2 -2
- package/src/propagator/RkResult.ts +2 -2
- package/src/propagator/RungeKutta4Propagator.ts +6 -6
- package/src/propagator/RungeKutta89Propagator.ts +2 -2
- package/src/propagator/RungeKuttaAdaptive.ts +62 -12
- package/src/propagator/Sgp4Propagator.ts +7 -7
- package/src/propagator/index.ts +4 -3
- package/src/sgp4/index.ts +3 -2
- package/src/sgp4/sgp4.ts +6 -6
- package/src/smoothing/ExponentialSmoothing.ts +2 -2
- package/src/time/Epoch.ts +3 -3
- package/src/time/EpochGPS.ts +5 -5
- package/src/time/EpochTAI.ts +2 -2
- package/src/time/EpochTDB.ts +2 -2
- package/src/time/EpochTT.ts +2 -2
- package/src/time/EpochUTC.ts +10 -10
- package/src/time/EpochWindow.ts +2 -2
- package/src/time/TimeStamped.ts +2 -2
- package/src/time/index.ts +9 -8
- package/src/transforms/TransformCache.ts +1 -1
- package/src/transforms/conversions.ts +2 -2
- package/src/transforms/index.ts +3 -2
- package/src/transforms/transforms.ts +4 -4
- package/src/types/types.ts +8 -3
- package/src/utils/constants.ts +2 -2
- package/src/utils/create-covariance-from-tle.ts +1 -1
- package/src/utils/functions.ts +10 -5
- package/src/utils/index.ts +6 -5
- package/src/utils/jacobian.ts +2 -2
- package/src/utils/linearDistance.ts +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @author
|
|
2
|
+
* @author Theodore Kruczek
|
|
3
3
|
* @license AGPL-3.0-or-later
|
|
4
4
|
* @copyright (c) 2025 Kruczek Labs LLC
|
|
5
5
|
*
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
import { Earth, EpochUTC, J2000, Kilometers, KilometersPerSecond, Vector3D } from '../main
|
|
18
|
+
import { Earth, EpochUTC, J2000, Kilometers, KilometersPerSecond, Vector3D } from '../main';
|
|
19
19
|
|
|
20
20
|
/**
|
|
21
21
|
* Herrik-Gibbs 3-position initial orbit determination.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @author
|
|
2
|
+
* @author Theodore Kruczek
|
|
3
3
|
* @license AGPL-3.0-or-later
|
|
4
4
|
* @copyright (c) 2025 Kruczek Labs LLC
|
|
5
5
|
*
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
import { Earth, EpochUTC, J2000, Kilometers, KilometersPerSecond, Radians, Vector3D } from '../main
|
|
18
|
+
import { Earth, EpochUTC, J2000, Kilometers, KilometersPerSecond, Radians, Vector3D } from '../main';
|
|
19
19
|
|
|
20
20
|
// / Lambert two-position and time initial orbit determination.
|
|
21
21
|
export class LambertIOD {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @author
|
|
2
|
+
* @author Theodore Kruczek
|
|
3
3
|
* @license AGPL-3.0-or-later
|
|
4
4
|
* @copyright (c) 2025 Kruczek Labs LLC
|
|
5
5
|
*
|
|
@@ -15,13 +15,13 @@
|
|
|
15
15
|
* Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import { RungeKutta89Propagator } from '../propagator/RungeKutta89Propagator
|
|
21
|
-
import { ObservationOptical } from './../observation/ObservationOptical
|
|
22
|
-
import { DownhillSimplex } from './../optimize/DownhillSimplex
|
|
23
|
-
import { CostFunction } from './../optimize/SimplexEntry
|
|
24
|
-
import { GoodingIOD } from './GoodingIOD
|
|
18
|
+
import { ForceModel } from '../force/ForceModel';
|
|
19
|
+
import { Earth, EpochUTC, J2000, Kilometers, KilometersPerSecond, RadecTopocentric, Vector3D } from '../main';
|
|
20
|
+
import { RungeKutta89Propagator } from '../propagator/RungeKutta89Propagator';
|
|
21
|
+
import { ObservationOptical } from './../observation/ObservationOptical';
|
|
22
|
+
import { DownhillSimplex } from './../optimize/DownhillSimplex';
|
|
23
|
+
import { CostFunction } from './../optimize/SimplexEntry';
|
|
24
|
+
import { GoodingIOD } from './GoodingIOD';
|
|
25
25
|
|
|
26
26
|
type SolveOptions = {
|
|
27
27
|
nRev?: number;
|
|
@@ -38,26 +38,24 @@ type SolveOptions = {
|
|
|
38
38
|
* Used for orbit determination from multiple optical observations.
|
|
39
39
|
*/
|
|
40
40
|
export class ModifiedGoodingIOD {
|
|
41
|
-
private
|
|
41
|
+
private observations_!: ObservationOptical[];
|
|
42
42
|
private readonly mu_: number;
|
|
43
43
|
|
|
44
|
-
constructor(
|
|
45
|
-
this.observations_ = observations;
|
|
44
|
+
constructor(mu: number = Earth.mu) {
|
|
46
45
|
this.mu_ = mu;
|
|
47
46
|
}
|
|
48
47
|
|
|
49
|
-
private createInitial_(
|
|
48
|
+
private createInitial_(r1Init: Kilometers | null, rNInit: Kilometers | null, nRev: number, direction: boolean): J2000 {
|
|
50
49
|
const iod = new GoodingIOD(
|
|
51
|
-
this.observations_[0],
|
|
52
|
-
this.observations_[Math.floor(this.observations_.length / 2)],
|
|
53
|
-
this.observations_[this.observations_.length - 1],
|
|
54
50
|
this.mu_,
|
|
55
51
|
);
|
|
56
52
|
|
|
57
|
-
return iod.
|
|
53
|
+
return iod.estimate(this.observations_[0],
|
|
54
|
+
this.observations_[Math.floor(this.observations_.length / 2)],
|
|
55
|
+
this.observations_[this.observations_.length - 1], r1Init, rNInit, nRev, direction);
|
|
58
56
|
}
|
|
59
57
|
|
|
60
|
-
private
|
|
58
|
+
private createErrorFunction_(aprioriEpoch: EpochUTC): CostFunction {
|
|
61
59
|
const forceModel = new ForceModel().setGravity(this.mu_);
|
|
62
60
|
const scoreFn = (x: Float64Array): number => {
|
|
63
61
|
const position = new Vector3D(x[0] as Kilometers, x[1] as Kilometers, x[2] as Kilometers);
|
|
@@ -87,8 +85,9 @@ export class ModifiedGoodingIOD {
|
|
|
87
85
|
}
|
|
88
86
|
|
|
89
87
|
solve(
|
|
90
|
-
|
|
91
|
-
|
|
88
|
+
observations: ObservationOptical[],
|
|
89
|
+
r0?: Kilometers,
|
|
90
|
+
rN?: Kilometers,
|
|
92
91
|
{
|
|
93
92
|
nRev = 0,
|
|
94
93
|
direction = true,
|
|
@@ -96,14 +95,15 @@ export class ModifiedGoodingIOD {
|
|
|
96
95
|
velSearch = 0.1,
|
|
97
96
|
tolerance = 1e-6,
|
|
98
97
|
printIter = false,
|
|
99
|
-
}: SolveOptions,
|
|
98
|
+
}: SolveOptions = this.defaultSolveOptions_(),
|
|
100
99
|
): J2000 {
|
|
100
|
+
this.observations_ = observations;
|
|
101
101
|
if (this.observations_.length < 3) {
|
|
102
102
|
throw new Error('At least 3 observations required for Gooding IOD.');
|
|
103
103
|
}
|
|
104
|
-
const init = this.createInitial_(r0, rN, nRev, direction);
|
|
104
|
+
const init = this.createInitial_(r0 ?? null, rN ?? null, nRev, direction);
|
|
105
105
|
const guess = Float64Array.from([...init.position.toArray(), ...init.velocity.toArray()]);
|
|
106
|
-
const solveFn = this.
|
|
106
|
+
const solveFn = this.createErrorFunction_(init.epoch);
|
|
107
107
|
const simplex = [
|
|
108
108
|
Float64Array.from(guess),
|
|
109
109
|
Float64Array.from([guess[0] + posSearch, guess[1], guess[2], guess[3], guess[4], guess[5]]),
|
|
@@ -130,4 +130,15 @@ export class ModifiedGoodingIOD {
|
|
|
130
130
|
),
|
|
131
131
|
);
|
|
132
132
|
}
|
|
133
|
+
|
|
134
|
+
private defaultSolveOptions_(): SolveOptions {
|
|
135
|
+
return {
|
|
136
|
+
nRev: 0,
|
|
137
|
+
direction: true,
|
|
138
|
+
posSearch: 10.0,
|
|
139
|
+
velSearch: 0.1,
|
|
140
|
+
tolerance: 1e-6,
|
|
141
|
+
printIter: false,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
133
144
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
export { BatchLeastSquaresOD } from './BatchLeastSquaresOD
|
|
2
|
-
export { BatchLeastSquaresResult } from './BatchLeastSquaresResult
|
|
3
|
-
export { GibbsIOD } from './GibbsIOD
|
|
4
|
-
export { GoodingIOD } from './GoodingIOD
|
|
5
|
-
export { HerrickGibbsIOD } from './HerrickGibbsIOD
|
|
6
|
-
export { LambertIOD } from './LambertIOD
|
|
7
|
-
export { ModifiedGoodingIOD } from './ModifiedGoodingIOD
|
|
1
|
+
export { BatchLeastSquaresOD } from './BatchLeastSquaresOD';
|
|
2
|
+
export { BatchLeastSquaresResult } from './BatchLeastSquaresResult';
|
|
3
|
+
export { GibbsIOD } from './GibbsIOD';
|
|
4
|
+
export { GoodingIOD } from './GoodingIOD';
|
|
5
|
+
export { HerrickGibbsIOD } from './HerrickGibbsIOD';
|
|
6
|
+
export { LambertIOD } from './LambertIOD';
|
|
7
|
+
export { ModifiedGoodingIOD } from './ModifiedGoodingIOD';
|
|
8
|
+
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @author
|
|
2
|
+
* @author Theodore Kruczek
|
|
3
3
|
* @license AGPL-3.0-or-later
|
|
4
4
|
* @copyright (c) 2025 Kruczek Labs LLC
|
|
5
5
|
*
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
18
|
/* eslint-disable class-methods-use-this */
|
|
19
|
-
import { RungeKuttaAdaptive } from './RungeKuttaAdaptive
|
|
19
|
+
import { RungeKuttaAdaptive } from './RungeKuttaAdaptive';
|
|
20
20
|
|
|
21
21
|
export class DormandPrince54Propagator extends RungeKuttaAdaptive {
|
|
22
22
|
private readonly a_: Float64Array = Float64Array.from([0.0, 1.0 / 5.0, 3.0 / 10.0, 4.0 / 5.0, 8.0 / 9.0, 1.0, 1.0]);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @author
|
|
2
|
+
* @author Theodore Kruczek
|
|
3
3
|
* @license AGPL-3.0-or-later
|
|
4
4
|
* @copyright (c) 2025 Kruczek Labs LLC
|
|
5
5
|
*
|
|
@@ -15,10 +15,10 @@
|
|
|
15
15
|
* Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import { Propagator } from './Propagator
|
|
18
|
+
import { Thrust } from '../force/Thrust';
|
|
19
|
+
import { VerletBlendInterpolator } from '../interpolator/VerletBlendInterpolator';
|
|
20
|
+
import { ClassicalElements, EpochUTC, J2000, Seconds } from '../main';
|
|
21
|
+
import { Propagator } from './Propagator';
|
|
22
22
|
|
|
23
23
|
// / Kepler analytical two-body propagator.
|
|
24
24
|
export class KeplerPropagator extends Propagator {
|
|
@@ -50,8 +50,7 @@ export class KeplerPropagator extends Propagator {
|
|
|
50
50
|
this.cacheState_ = J2000.fromClassicalElements(this.elements_);
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
-
|
|
54
|
-
maneuver(maneuver: Thrust, interval = 60): J2000[] {
|
|
53
|
+
maneuver(maneuver: Thrust): J2000[] {
|
|
55
54
|
this.cacheState_ = maneuver.apply(this.propagate(maneuver.center));
|
|
56
55
|
this.elements_ = this.cacheState_.toClassicalElements();
|
|
57
56
|
|
|
@@ -74,7 +73,7 @@ export class KeplerPropagator extends Propagator {
|
|
|
74
73
|
ephemeris.push(this.cacheState_);
|
|
75
74
|
}
|
|
76
75
|
}
|
|
77
|
-
ephemeris.push(...this.maneuver(mvr
|
|
76
|
+
ephemeris.push(...this.maneuver(mvr));
|
|
78
77
|
}
|
|
79
78
|
while (this.cacheState_.epoch < finish) {
|
|
80
79
|
const step = Math.min(finish.difference(this.cacheState_.epoch), interval) as Seconds;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @author
|
|
2
|
+
* @author Theodore Kruczek
|
|
3
3
|
* @license AGPL-3.0-or-later
|
|
4
4
|
* @copyright (c) 2025 Kruczek Labs LLC
|
|
5
5
|
*
|
|
@@ -15,10 +15,10 @@
|
|
|
15
15
|
* Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import { GoldenSection } from './../optimize/GoldenSection
|
|
18
|
+
import { Thrust } from '../force/Thrust';
|
|
19
|
+
import { VerletBlendInterpolator } from '../interpolator/VerletBlendInterpolator';
|
|
20
|
+
import { EpochUTC, J2000, Seconds } from '../main';
|
|
21
|
+
import { GoldenSection } from './../optimize/GoldenSection';
|
|
22
22
|
|
|
23
23
|
// Propagator base class.
|
|
24
24
|
export abstract class Propagator {
|
|
@@ -93,7 +93,7 @@ export abstract class Propagator {
|
|
|
93
93
|
ephemerisManeuver(
|
|
94
94
|
start: EpochUTC,
|
|
95
95
|
finish: EpochUTC,
|
|
96
|
-
|
|
96
|
+
_maneuvers: Thrust[],
|
|
97
97
|
interval = 60.0 as Seconds,
|
|
98
98
|
): VerletBlendInterpolator {
|
|
99
99
|
const output: J2000[] = [];
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @author
|
|
2
|
+
* @author Theodore Kruczek
|
|
3
3
|
* @license AGPL-3.0-or-later
|
|
4
4
|
* @copyright (c) 2025 Kruczek Labs LLC
|
|
5
5
|
*
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
import { J2000 } from '../main
|
|
18
|
+
import { J2000 } from '../main';
|
|
19
19
|
|
|
20
20
|
// / Runge-Kutta adaptive state checkpoint.
|
|
21
21
|
export class RkCheckpoint {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @author
|
|
2
|
+
* @author Theodore Kruczek
|
|
3
3
|
* @license AGPL-3.0-or-later
|
|
4
4
|
* @copyright (c) 2025 Kruczek Labs LLC
|
|
5
5
|
*
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
import { J2000 } from '../main
|
|
18
|
+
import { J2000 } from '../main';
|
|
19
19
|
|
|
20
20
|
// / Result of adaptive numerical integration.
|
|
21
21
|
export class RkResult {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @author
|
|
2
|
+
* @author Theodore Kruczek
|
|
3
3
|
* @license AGPL-3.0-or-later
|
|
4
4
|
* @copyright (c) 2025 Kruczek Labs LLC
|
|
5
5
|
*
|
|
@@ -15,11 +15,11 @@
|
|
|
15
15
|
* Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import { Propagator } from './Propagator
|
|
18
|
+
import { ForceModel } from '../force/ForceModel';
|
|
19
|
+
import { Thrust } from '../force/Thrust';
|
|
20
|
+
import { VerletBlendInterpolator } from '../interpolator/VerletBlendInterpolator';
|
|
21
|
+
import { EpochUTC, J2000, Kilometers, KilometersPerSecond, Seconds, Vector, Vector3D } from '../main';
|
|
22
|
+
import { Propagator } from './Propagator';
|
|
23
23
|
|
|
24
24
|
// / Runge-Kutta 4 fixed numerical propagator.
|
|
25
25
|
export class RungeKutta4Propagator extends Propagator {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @author
|
|
2
|
+
* @author Theodore Kruczek
|
|
3
3
|
* @license AGPL-3.0-or-later
|
|
4
4
|
* @copyright (c) 2025 Kruczek Labs LLC
|
|
5
5
|
*
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
|
|
18
18
|
/* eslint-disable @typescript-eslint/no-loss-of-precision */
|
|
19
19
|
/* eslint-disable class-methods-use-this */
|
|
20
|
-
import { RungeKuttaAdaptive } from './RungeKuttaAdaptive
|
|
20
|
+
import { RungeKuttaAdaptive } from './RungeKuttaAdaptive';
|
|
21
21
|
|
|
22
22
|
// / Runge-Kutta 8(9) adaptive numerical propagator.
|
|
23
23
|
export class RungeKutta89Propagator extends RungeKuttaAdaptive {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @author
|
|
2
|
+
* @author Theodore Kruczek
|
|
3
3
|
* @license AGPL-3.0-or-later
|
|
4
4
|
* @copyright (c) 2025 Kruczek Labs LLC
|
|
5
5
|
*
|
|
@@ -15,13 +15,13 @@
|
|
|
15
15
|
* Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import { VerletBlendInterpolator } from './../interpolator/VerletBlendInterpolator
|
|
22
|
-
import { Propagator } from './Propagator
|
|
23
|
-
import { RkCheckpoint } from './RkCheckpoint
|
|
24
|
-
import { RkResult } from './RkResult
|
|
18
|
+
import { ForceModel } from '../force/ForceModel';
|
|
19
|
+
import { Thrust } from '../force/Thrust';
|
|
20
|
+
import { EpochUTC, J2000, Kilometers, KilometersPerSecond, Seconds, Vector, Vector3D } from '../main';
|
|
21
|
+
import { VerletBlendInterpolator } from './../interpolator/VerletBlendInterpolator';
|
|
22
|
+
import { Propagator } from './Propagator';
|
|
23
|
+
import { RkCheckpoint } from './RkCheckpoint';
|
|
24
|
+
import { RkResult } from './RkResult';
|
|
25
25
|
|
|
26
26
|
// / Adaptive Runge-Kutta propagator base class.
|
|
27
27
|
export abstract class RungeKuttaAdaptive extends Propagator {
|
|
@@ -84,7 +84,7 @@ export abstract class RungeKuttaAdaptive extends Propagator {
|
|
|
84
84
|
|
|
85
85
|
private kfn_(
|
|
86
86
|
epoch: EpochUTC,
|
|
87
|
-
rv: Vector<Kilometers|KilometersPerSecond>,
|
|
87
|
+
rv: Vector<Kilometers | KilometersPerSecond>,
|
|
88
88
|
hArg: Seconds,
|
|
89
89
|
kArg: Vector<Kilometers>,
|
|
90
90
|
step: Seconds,
|
|
@@ -101,6 +101,14 @@ export abstract class RungeKuttaAdaptive extends Propagator {
|
|
|
101
101
|
}
|
|
102
102
|
|
|
103
103
|
private integrate_(state: J2000, step: Seconds): RkResult {
|
|
104
|
+
// Check for NaN in input
|
|
105
|
+
if (!Number.isFinite(step)) {
|
|
106
|
+
throw new RangeError(`Invalid step size: ${step}`);
|
|
107
|
+
}
|
|
108
|
+
if (!Number.isFinite(state.epoch.posix)) {
|
|
109
|
+
throw new RangeError(`Invalid epoch: ${state.epoch.posix}`);
|
|
110
|
+
}
|
|
111
|
+
|
|
104
112
|
const k: Vector[] = new Array(this.a.length).fill(Vector.origin3);
|
|
105
113
|
const y = state.position.join(state.velocity) as Vector<Kilometers>;
|
|
106
114
|
|
|
@@ -121,16 +129,37 @@ export abstract class RungeKuttaAdaptive extends Propagator {
|
|
|
121
129
|
y1 = y1.add(k[i].scale(this.ch[i])) as Vector<Kilometers>;
|
|
122
130
|
y2 = y2.add(k[i].scale(this.c[i])) as Vector<Kilometers>;
|
|
123
131
|
}
|
|
124
|
-
|
|
125
|
-
|
|
132
|
+
let teVal = y1.distance(y2);
|
|
133
|
+
|
|
134
|
+
if (teVal === 0) {
|
|
135
|
+
teVal = Number.EPSILON;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// Guard against division by zero or very small errors
|
|
139
|
+
if (!Number.isFinite(teVal) || teVal === 0) {
|
|
140
|
+
throw new RangeError(`Invalid error value in integration: ${teVal}`);
|
|
141
|
+
}
|
|
142
|
+
|
|
126
143
|
const hOld = Math.abs(step);
|
|
144
|
+
let hNew = 0.9 * hOld * (this.tolerance_ / teVal) ** (1.0 / this.order);
|
|
127
145
|
|
|
128
146
|
hNew = Math.max(0.2 * hOld, Math.min(5.0 * hOld, hNew));
|
|
129
147
|
hNew = Math.max(1e-5, Math.min(1000.0, hNew));
|
|
130
148
|
|
|
149
|
+
// Verify step size is valid
|
|
150
|
+
if (!Number.isFinite(hNew)) {
|
|
151
|
+
throw new RangeError(`Computed step size is invalid: ${hNew}`);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
const newEpoch = state.epoch.roll(step);
|
|
155
|
+
|
|
156
|
+
if (!Number.isFinite(newEpoch.posix)) {
|
|
157
|
+
throw new RangeError(`Computed epoch is invalid: ${newEpoch.posix}`);
|
|
158
|
+
}
|
|
159
|
+
|
|
131
160
|
return new RkResult(
|
|
132
161
|
new J2000(
|
|
133
|
-
|
|
162
|
+
newEpoch,
|
|
134
163
|
y1.toVector3D(0) as Vector3D<Kilometers>,
|
|
135
164
|
y1.toVector3D(3) as Vector3D<KilometersPerSecond>,
|
|
136
165
|
),
|
|
@@ -141,6 +170,8 @@ export abstract class RungeKuttaAdaptive extends Propagator {
|
|
|
141
170
|
|
|
142
171
|
propagate(epoch: EpochUTC): J2000 {
|
|
143
172
|
let delta = epoch.difference(this._cacheState.epoch);
|
|
173
|
+
let consecutiveFailures = 0;
|
|
174
|
+
const maxConsecutiveFailures = 1000;
|
|
144
175
|
|
|
145
176
|
while (delta !== 0) {
|
|
146
177
|
const direction = delta >= 0 ? 1 : -1;
|
|
@@ -149,8 +180,27 @@ export abstract class RungeKuttaAdaptive extends Propagator {
|
|
|
149
180
|
|
|
150
181
|
this._stepSize = result.newStep;
|
|
151
182
|
if (result.error > this.tolerance_) {
|
|
183
|
+
consecutiveFailures++;
|
|
184
|
+
if (consecutiveFailures >= maxConsecutiveFailures) {
|
|
185
|
+
return this._cacheState;
|
|
186
|
+
}
|
|
152
187
|
continue;
|
|
153
188
|
}
|
|
189
|
+
consecutiveFailures = 0;
|
|
190
|
+
// Validate result.state before assigning
|
|
191
|
+
if (!Number.isFinite(result.state.epoch.posix)) {
|
|
192
|
+
throw new RangeError(`Invalid propagated epoch: ${result.state.epoch.posix}`);
|
|
193
|
+
}
|
|
194
|
+
if (!Number.isFinite(result.state.position.x) ||
|
|
195
|
+
!Number.isFinite(result.state.position.y) ||
|
|
196
|
+
!Number.isFinite(result.state.position.z)) {
|
|
197
|
+
throw new RangeError(`Invalid propagated position: ${result.state.position}`);
|
|
198
|
+
}
|
|
199
|
+
if (!Number.isFinite(result.state.velocity.x) ||
|
|
200
|
+
!Number.isFinite(result.state.velocity.y) ||
|
|
201
|
+
!Number.isFinite(result.state.velocity.z)) {
|
|
202
|
+
throw new RangeError(`Invalid propagated velocity: ${result.state.velocity}`);
|
|
203
|
+
}
|
|
154
204
|
this._cacheState = result.state;
|
|
155
205
|
delta = epoch.difference(this._cacheState.epoch);
|
|
156
206
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @author
|
|
2
|
+
* @author Theodore Kruczek
|
|
3
3
|
* @license AGPL-3.0-or-later
|
|
4
4
|
* @copyright (c) 2025 Kruczek Labs LLC
|
|
5
5
|
*
|
|
@@ -17,10 +17,10 @@
|
|
|
17
17
|
|
|
18
18
|
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
19
19
|
/* eslint-disable class-methods-use-this */
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
23
|
-
import { Propagator } from './Propagator
|
|
20
|
+
import { Thrust } from '../force/Thrust';
|
|
21
|
+
import { VerletBlendInterpolator } from '../interpolator/VerletBlendInterpolator';
|
|
22
|
+
import { EpochUTC, J2000, Tle } from '../main';
|
|
23
|
+
import { Propagator } from './Propagator';
|
|
24
24
|
|
|
25
25
|
/**
|
|
26
26
|
* Sgp4Propagator is a propagator that uses the SGP4 model to propagate the state of an object.
|
|
@@ -51,7 +51,7 @@ export class Sgp4Propagator extends Propagator {
|
|
|
51
51
|
* @param maneuvers The array of thrust maneuvers.
|
|
52
52
|
* @param interval The time interval in seconds.
|
|
53
53
|
*/
|
|
54
|
-
ephemerisManeuver(
|
|
54
|
+
ephemerisManeuver(_start: EpochUTC, _finish: EpochUTC, _maneuvers: Thrust[], _interval = 60.0): VerletBlendInterpolator {
|
|
55
55
|
throw new Error('Maneuvers cannot be modelled with SGP4.');
|
|
56
56
|
}
|
|
57
57
|
|
|
@@ -61,7 +61,7 @@ export class Sgp4Propagator extends Propagator {
|
|
|
61
61
|
* @param interval - The time interval for the maneuver (default: 60.0 seconds).
|
|
62
62
|
* @throws Error if maneuvers cannot be modeled with SGP4.
|
|
63
63
|
*/
|
|
64
|
-
maneuver(
|
|
64
|
+
maneuver(_maneuver: Thrust, _interval = 60.0): J2000[] {
|
|
65
65
|
throw new Error('Maneuvers cannot be modelled with SGP4.');
|
|
66
66
|
}
|
|
67
67
|
|
package/src/propagator/index.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
export { RungeKutta4Propagator } from './RungeKutta4Propagator
|
|
2
|
-
export { RungeKutta89Propagator } from './RungeKutta89Propagator
|
|
3
|
-
export { Sgp4Propagator } from './Sgp4Propagator
|
|
1
|
+
export { RungeKutta4Propagator } from './RungeKutta4Propagator';
|
|
2
|
+
export { RungeKutta89Propagator } from './RungeKutta89Propagator';
|
|
3
|
+
export { Sgp4Propagator } from './Sgp4Propagator';
|
|
4
|
+
|
package/src/sgp4/index.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @author
|
|
2
|
+
* @author Theodore Kruczek
|
|
3
3
|
* @description Orbital Object ToolKit (ootk) is a collection of tools for working
|
|
4
4
|
* with satellites and other orbital objects.
|
|
5
5
|
* @license AGPL-3.0-or-later
|
|
@@ -21,4 +21,5 @@
|
|
|
21
21
|
* Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
|
|
22
22
|
*/
|
|
23
23
|
|
|
24
|
-
export { Sgp4 } from './sgp4
|
|
24
|
+
export { Sgp4 } from './sgp4';
|
|
25
|
+
|
package/src/sgp4/sgp4.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @author
|
|
2
|
+
* @author Theodore Kruczek
|
|
3
3
|
* @description Orbital Object ToolKit (ootk) is a collection of tools for working
|
|
4
4
|
* with satellites and other orbital objects.
|
|
5
5
|
* @license AGPL-3.0-or-later
|
|
@@ -27,14 +27,14 @@
|
|
|
27
27
|
/* eslint-disable max-lines */
|
|
28
28
|
/* eslint-disable @typescript-eslint/no-loss-of-precision */
|
|
29
29
|
|
|
30
|
-
import {
|
|
31
|
-
import {
|
|
30
|
+
import { Sgp4OpsMode } from '../enums/Sgp4OpsMode';
|
|
31
|
+
import { OmmParsedDataFormat } from '../interfaces/OmmFormat';
|
|
32
|
+
import { Tle } from '../main';
|
|
32
33
|
import {
|
|
33
34
|
GreenwichMeanSiderealTime, Kilometers, KilometersPerSecond, SatelliteRecord, StateVectorSgp4, Vec3Flat,
|
|
34
35
|
} from '../types/types.js';
|
|
35
|
-
import { DEG2RAD, PI, TAU, temp4, x2o3 } from '../utils/constants
|
|
36
|
-
import { Sgp4ErrorCode } from './sgp4-error
|
|
37
|
-
import { Tle } from '../main.js';
|
|
36
|
+
import { DEG2RAD, PI, TAU, temp4, x2o3 } from '../utils/constants';
|
|
37
|
+
import { Sgp4ErrorCode } from './sgp4-error';
|
|
38
38
|
|
|
39
39
|
export enum Sgp4GravConstants {
|
|
40
40
|
wgs72old = 'wgs72old',
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @author
|
|
2
|
+
* @author Theodore Kruczek
|
|
3
3
|
* @license AGPL-3.0-or-later
|
|
4
4
|
* @copyright (c) 2025 Kruczek Labs LLC
|
|
5
5
|
*
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
import { EpochUTC } from '../main
|
|
18
|
+
import { EpochUTC } from '../main';
|
|
19
19
|
|
|
20
20
|
// / Exponential data smoothing methods.
|
|
21
21
|
export class ExponentialSmoothing {
|
package/src/time/Epoch.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @author
|
|
2
|
+
* @author Theodore Kruczek
|
|
3
3
|
* @description Orbital Object ToolKit (ootk) is a collection of tools for working
|
|
4
4
|
* with satellites and other orbital objects.
|
|
5
5
|
* @license AGPL-3.0-or-later
|
|
@@ -21,8 +21,8 @@
|
|
|
21
21
|
* Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
|
|
22
22
|
*/
|
|
23
23
|
|
|
24
|
-
import { Seconds } from '../main
|
|
25
|
-
import { secondsPerDay } from '../utils/constants
|
|
24
|
+
import { Seconds } from '../main';
|
|
25
|
+
import { secondsPerDay } from '../utils/constants';
|
|
26
26
|
|
|
27
27
|
// / Base class for [Epoch] data.
|
|
28
28
|
export class Epoch {
|
package/src/time/EpochGPS.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @author
|
|
2
|
+
* @author Theodore Kruczek
|
|
3
3
|
* @description Orbital Object ToolKit (ootk) is a collection of tools for working
|
|
4
4
|
* with satellites and other orbital objects.
|
|
5
5
|
* @license AGPL-3.0-or-later
|
|
@@ -21,10 +21,10 @@
|
|
|
21
21
|
* Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
|
|
22
22
|
*/
|
|
23
23
|
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
import { secondsPerWeek } from '../utils/constants
|
|
27
|
-
import type { EpochUTC } from './EpochUTC
|
|
24
|
+
import { DataHandler } from '../data/DataHandler';
|
|
25
|
+
import { Seconds } from '../main';
|
|
26
|
+
import { secondsPerWeek } from '../utils/constants';
|
|
27
|
+
import type { EpochUTC } from './EpochUTC';
|
|
28
28
|
// / Global Positioning System _(GPS)_ formatted epoch.
|
|
29
29
|
export class EpochGPS {
|
|
30
30
|
/**
|
package/src/time/EpochTAI.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @author
|
|
2
|
+
* @author Theodore Kruczek
|
|
3
3
|
* @description Orbital Object ToolKit (ootk) is a collection of tools for working
|
|
4
4
|
* with satellites and other orbital objects.
|
|
5
5
|
* @license AGPL-3.0-or-later
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
* Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
|
|
22
22
|
*/
|
|
23
23
|
|
|
24
|
-
import { Epoch } from './Epoch
|
|
24
|
+
import { Epoch } from './Epoch';
|
|
25
25
|
|
|
26
26
|
/** Represents an Epoch in International Atomic Time (TAI). */
|
|
27
27
|
export class EpochTAI extends Epoch { }
|
package/src/time/EpochTDB.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @author
|
|
2
|
+
* @author Theodore Kruczek
|
|
3
3
|
* @description Orbital Object ToolKit (ootk) is a collection of tools for working
|
|
4
4
|
* with satellites and other orbital objects.
|
|
5
5
|
* @license AGPL-3.0-or-later
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
* Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
|
|
22
22
|
*/
|
|
23
23
|
|
|
24
|
-
import { Epoch } from './Epoch
|
|
24
|
+
import { Epoch } from './Epoch';
|
|
25
25
|
|
|
26
26
|
/** Represents an Epoch in TDB (Barycentric Dynamical Time). */
|
|
27
27
|
export class EpochTDB extends Epoch { }
|
package/src/time/EpochTT.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @author
|
|
2
|
+
* @author Theodore Kruczek
|
|
3
3
|
* @description Orbital Object ToolKit (ootk) is a collection of tools for working
|
|
4
4
|
* with satellites and other orbital objects.
|
|
5
5
|
* @license AGPL-3.0-or-later
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
* Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
|
|
22
22
|
*/
|
|
23
23
|
|
|
24
|
-
import { Epoch } from './Epoch
|
|
24
|
+
import { Epoch } from './Epoch';
|
|
25
25
|
|
|
26
26
|
/** Represents a Terrestrial Time (TT) epoch. */
|
|
27
27
|
export class EpochTT extends Epoch { }
|