ootk 4.0.9 → 5.1.0
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/README.md +0 -15
- package/dist/body/Celestial.d.ts +96 -0
- package/dist/body/Celestial.js +124 -0
- package/dist/body/Celestial.js.map +1 -0
- package/dist/body/Earth.d.ts +68 -0
- package/dist/body/Earth.js +198 -0
- package/dist/body/Earth.js.map +1 -0
- package/dist/body/Moon.d.ts +137 -0
- package/dist/body/Moon.js +464 -0
- package/dist/body/Moon.js.map +1 -0
- package/dist/body/NutationAngles.d.ts +38 -0
- package/dist/body/NutationAngles.js +24 -0
- package/dist/body/NutationAngles.js.map +1 -0
- package/dist/body/PrecessionAngles.d.ts +29 -0
- package/dist/body/PrecessionAngles.js +24 -0
- package/dist/body/PrecessionAngles.js.map +1 -0
- package/dist/body/Sun.d.ts +301 -0
- package/dist/body/Sun.js +544 -0
- package/dist/body/Sun.js.map +1 -0
- package/dist/body/index.d.ts +26 -0
- package/dist/body/index.js +27 -0
- package/dist/body/index.js.map +1 -0
- package/dist/coordinate/ClassicalElements.d.ts +132 -0
- package/dist/coordinate/ClassicalElements.js +279 -0
- package/dist/coordinate/ClassicalElements.js.map +1 -0
- package/dist/coordinate/EquinoctialElements.d.ts +114 -0
- package/dist/coordinate/EquinoctialElements.js +172 -0
- package/dist/coordinate/EquinoctialElements.js.map +1 -0
- package/dist/coordinate/FormatTle.d.ts +95 -0
- package/dist/coordinate/FormatTle.js +184 -0
- package/dist/coordinate/FormatTle.js.map +1 -0
- package/dist/coordinate/Geodetic.d.ts +110 -0
- package/dist/coordinate/Geodetic.js +163 -0
- package/dist/coordinate/Geodetic.js.map +1 -0
- package/dist/coordinate/Hill.d.ts +2 -2
- package/dist/coordinate/Hill.js +2 -2
- package/dist/coordinate/Hill.js.map +1 -1
- package/dist/coordinate/ITRF.d.ts +75 -0
- package/dist/coordinate/ITRF.js +134 -0
- package/dist/coordinate/ITRF.js.map +1 -0
- package/dist/coordinate/J2000.d.ts +65 -0
- package/dist/coordinate/J2000.js +120 -0
- package/dist/coordinate/J2000.js.map +1 -0
- package/dist/coordinate/RIC.d.ts +64 -0
- package/dist/coordinate/RIC.js +79 -0
- package/dist/coordinate/RIC.js.map +1 -0
- package/dist/coordinate/RelativeState.d.ts +70 -0
- package/dist/coordinate/RelativeState.js +79 -0
- package/dist/coordinate/RelativeState.js.map +1 -0
- package/dist/coordinate/StateVector.d.ts +76 -0
- package/dist/coordinate/StateVector.js +97 -0
- package/dist/coordinate/StateVector.js.map +1 -0
- package/dist/coordinate/TEME.d.ts +57 -0
- package/dist/coordinate/TEME.js +89 -0
- package/dist/coordinate/TEME.js.map +1 -0
- package/dist/coordinate/Tle.d.ts +429 -0
- package/dist/coordinate/Tle.js +865 -0
- package/dist/coordinate/Tle.js.map +1 -0
- package/dist/coordinate/index.d.ts +11 -0
- package/dist/coordinate/index.js +11 -0
- package/dist/coordinate/index.js.map +1 -1
- package/dist/coordinate/tle-format-data.d.ts +41 -0
- package/dist/coordinate/tle-format-data.js +46 -0
- package/dist/coordinate/tle-format-data.js.map +1 -0
- package/dist/covariance/CovarianceSample.d.ts +9 -6
- package/dist/covariance/CovarianceSample.js +92 -18
- 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 -0
- package/dist/covariance/index.js +3 -0
- package/dist/covariance/index.js.map +1 -0
- package/dist/data/DataHandler.d.ts +66 -0
- package/dist/data/DataHandler.js +80 -0
- package/dist/data/DataHandler.js.map +1 -0
- package/dist/data/values/Egm96Data.d.ts +37 -0
- package/dist/data/values/Egm96Data.js +63 -0
- package/dist/data/values/Egm96Data.js.map +1 -0
- package/dist/data/values/HpAtmosphereData.d.ts +33 -0
- package/dist/data/values/HpAtmosphereData.js +58 -0
- package/dist/data/values/HpAtmosphereData.js.map +1 -0
- package/dist/data/values/HpAtmosphereResult.d.ts +29 -0
- package/dist/data/values/HpAtmosphereResult.js +38 -0
- package/dist/data/values/HpAtmosphereResult.js.map +1 -0
- package/dist/data/values/Iau1980Data.d.ts +36 -0
- package/dist/data/values/Iau1980Data.js +52 -0
- package/dist/data/values/Iau1980Data.js.map +1 -0
- package/dist/data/values/LeapSecond.d.ts +27 -0
- package/dist/data/values/LeapSecond.js +35 -0
- package/dist/data/values/LeapSecond.js.map +1 -0
- package/dist/data/values/LeapSecondData.d.ts +41 -0
- package/dist/data/values/LeapSecondData.js +103 -0
- package/dist/data/values/LeapSecondData.js.map +1 -0
- package/dist/data/values/egm96.d.ts +24 -0
- package/dist/data/values/egm96.js +726 -0
- package/dist/data/values/egm96.js.map +1 -0
- package/dist/data/values/hpAtmosphere.d.ts +24 -0
- package/dist/data/values/hpAtmosphere.js +76 -0
- package/dist/data/values/hpAtmosphere.js.map +1 -0
- package/dist/data/values/iau1980.d.ts +24 -0
- package/dist/data/values/iau1980.js +30 -0
- package/dist/data/values/iau1980.js.map +1 -0
- package/dist/enums/AngularDiameterMethod.d.ts +27 -0
- package/dist/enums/AngularDiameterMethod.js +29 -0
- package/dist/enums/AngularDiameterMethod.js.map +1 -0
- package/dist/enums/AngularDistanceMethod.d.ts +27 -0
- package/dist/enums/AngularDistanceMethod.js +29 -0
- package/dist/enums/AngularDistanceMethod.js.map +1 -0
- package/dist/enums/OrbitRegime.d.ts +30 -0
- package/dist/enums/OrbitRegime.js +32 -0
- package/dist/enums/OrbitRegime.js.map +1 -0
- package/dist/enums/PassType.d.ts +28 -0
- package/dist/enums/PassType.js +30 -0
- package/dist/enums/PassType.js.map +1 -0
- package/dist/enums/Sgp4OpsMode.d.ts +26 -0
- package/dist/enums/Sgp4OpsMode.js +28 -0
- package/dist/enums/Sgp4OpsMode.js.map +1 -0
- package/dist/enums/index.d.ts +5 -0
- package/dist/enums/index.js +5 -0
- package/dist/enums/index.js.map +1 -1
- package/dist/force/AtmosphericDrag.d.ts +2 -2
- package/dist/force/AtmosphericDrag.js +3 -6
- package/dist/force/AtmosphericDrag.js.map +1 -1
- package/dist/force/EarthGravity.d.ts +2 -2
- package/dist/force/EarthGravity.js +2 -2
- package/dist/force/EarthGravity.js.map +1 -1
- package/dist/force/Force.d.ts +2 -2
- package/dist/force/Force.js +1 -1
- package/dist/force/ForceModel.d.ts +2 -2
- package/dist/force/ForceModel.js +2 -2
- package/dist/force/ForceModel.js.map +1 -1
- package/dist/force/Gravity.d.ts +2 -2
- package/dist/force/Gravity.js +2 -2
- package/dist/force/Gravity.js.map +1 -1
- package/dist/force/SolarRadiationPressure.d.ts +2 -2
- package/dist/force/SolarRadiationPressure.js +2 -2
- package/dist/force/SolarRadiationPressure.js.map +1 -1
- package/dist/force/ThirdBodyGravity.d.ts +2 -2
- package/dist/force/ThirdBodyGravity.js +2 -2
- package/dist/force/ThirdBodyGravity.js.map +1 -1
- package/dist/force/Thrust.d.ts +2 -2
- package/dist/force/Thrust.js +2 -2
- package/dist/force/Thrust.js.map +1 -1
- package/dist/interfaces/BaseObjectParams.d.ts +31 -0
- package/dist/interfaces/BaseObjectParams.js +24 -0
- package/dist/interfaces/BaseObjectParams.js.map +1 -0
- package/dist/interfaces/ClassicalElementsParams.d.ts +33 -0
- package/dist/interfaces/ClassicalElementsParams.js +24 -0
- package/dist/interfaces/ClassicalElementsParams.js.map +1 -0
- package/dist/interfaces/EquinoctialElementsParams.d.ts +35 -0
- package/dist/interfaces/EquinoctialElementsParams.js +24 -0
- package/dist/interfaces/EquinoctialElementsParams.js.map +1 -0
- package/dist/interfaces/GroundPositionParams.d.ts +28 -0
- package/dist/interfaces/GroundPositionParams.js +24 -0
- package/dist/interfaces/GroundPositionParams.js.map +1 -0
- package/dist/interfaces/OmmFormat.d.ts +62 -0
- package/dist/interfaces/OmmFormat.js +2 -0
- package/dist/interfaces/OmmFormat.js.map +1 -0
- package/dist/interfaces/OptionsParams.d.ts +3 -0
- package/dist/interfaces/OptionsParams.js +2 -0
- package/dist/interfaces/OptionsParams.js.map +1 -0
- package/dist/interfaces/RfSensorParams.d.ts +1 -1
- package/dist/interfaces/SatelliteParams.d.ts +18 -0
- package/dist/interfaces/SatelliteParams.js +2 -0
- package/dist/interfaces/SatelliteParams.js.map +1 -0
- package/dist/interfaces/SensorParams.d.ts +38 -0
- package/dist/interfaces/SensorParams.js +2 -0
- package/dist/interfaces/SensorParams.js.map +1 -0
- package/dist/interfaces/StarObjectParams.d.ts +10 -0
- package/dist/interfaces/StarObjectParams.js +2 -0
- package/dist/interfaces/StarObjectParams.js.map +1 -0
- package/dist/interfaces/TimeVariables.d.ts +6 -0
- package/dist/interfaces/TimeVariables.js +2 -0
- package/dist/interfaces/TimeVariables.js.map +1 -0
- package/dist/interfaces/index.d.ts +8 -0
- package/dist/interpolator/ChebyshevCoefficients.d.ts +5 -5
- package/dist/interpolator/ChebyshevCoefficients.js +2 -2
- package/dist/interpolator/ChebyshevCoefficients.js.map +1 -1
- package/dist/interpolator/ChebyshevInterpolator.d.ts +3 -3
- package/dist/interpolator/ChebyshevInterpolator.js +9 -9
- 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 +10 -10
- package/dist/interpolator/CubicSplineInterpolator.js.map +1 -1
- package/dist/interpolator/FieldInterpolator.d.ts +1 -1
- package/dist/interpolator/FieldInterpolator.js +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 +7 -7
- package/dist/interpolator/LagrangeInterpolator.js +2 -2
- package/dist/interpolator/LagrangeInterpolator.js.map +1 -1
- package/dist/interpolator/StateInterpolator.d.ts +2 -2
- package/dist/interpolator/StateInterpolator.js +1 -1
- package/dist/interpolator/VerletBlendInterpolator.d.ts +2 -2
- package/dist/interpolator/VerletBlendInterpolator.js +2 -2
- package/dist/interpolator/VerletBlendInterpolator.js.map +1 -1
- package/dist/main.d.ts +15 -5
- package/dist/main.js +15 -5
- package/dist/main.js.map +1 -1
- package/dist/maneuver/TwoBurnOrbitTransfer.d.ts +2 -2
- package/dist/maneuver/TwoBurnOrbitTransfer.js +2 -2
- package/dist/maneuver/TwoBurnOrbitTransfer.js.map +1 -1
- package/dist/maneuver/Waypoint.d.ts +2 -2
- package/dist/maneuver/Waypoint.js +2 -2
- package/dist/maneuver/Waypoint.js.map +1 -1
- package/dist/objects/BaseObject.d.ts +74 -0
- package/dist/objects/BaseObject.js +151 -0
- package/dist/objects/BaseObject.js.map +1 -0
- package/dist/objects/DetailedSatellite.d.ts +3 -2
- package/dist/objects/DetailedSatellite.js +6 -4
- package/dist/objects/DetailedSatellite.js.map +1 -1
- package/dist/objects/DetailedSensor.d.ts +3 -2
- package/dist/objects/DetailedSensor.js +2 -2
- package/dist/objects/DetailedSensor.js.map +1 -1
- package/dist/objects/GroundObject.d.ts +85 -0
- package/dist/objects/GroundObject.js +143 -0
- package/dist/objects/GroundObject.js.map +1 -0
- package/dist/objects/LandObject.d.ts +3 -2
- 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 +1 -2
- package/dist/objects/RfSensor.js +1 -2
- package/dist/objects/RfSensor.js.map +1 -1
- package/dist/objects/Satellite.d.ts +226 -0
- package/dist/objects/Satellite.js +443 -0
- package/dist/objects/Satellite.js.map +1 -0
- package/dist/objects/Sensor.d.ts +99 -0
- package/dist/objects/Sensor.js +238 -0
- package/dist/objects/Sensor.js.map +1 -0
- package/dist/objects/Star.d.ts +36 -0
- package/dist/objects/Star.js +59 -0
- package/dist/objects/Star.js.map +1 -0
- package/dist/objects/index.d.ts +5 -0
- package/dist/objects/index.js +5 -0
- package/dist/objects/index.js.map +1 -1
- package/dist/observation/Observation.d.ts +2 -2
- package/dist/observation/Observation.js +1 -1
- package/dist/observation/ObservationOptical.d.ts +6 -6
- package/dist/observation/ObservationOptical.js +9 -9
- package/dist/observation/ObservationOptical.js.map +1 -1
- package/dist/observation/ObservationRadar.d.ts +6 -6
- package/dist/observation/ObservationRadar.js +9 -9
- package/dist/observation/ObservationRadar.js.map +1 -1
- package/dist/observation/ObservationUtils.d.ts +4 -2
- package/dist/observation/ObservationUtils.js +16 -2
- package/dist/observation/ObservationUtils.js.map +1 -1
- package/dist/observation/PropagatorPairs.d.ts +4 -4
- package/dist/observation/PropagatorPairs.js +7 -7
- package/dist/observation/PropagatorPairs.js.map +1 -1
- package/dist/observation/RAE.d.ts +111 -0
- package/dist/observation/RAE.js +214 -0
- package/dist/observation/RAE.js.map +1 -0
- package/dist/observation/RadecGeocentric.d.ts +111 -0
- package/dist/observation/RadecGeocentric.js +169 -0
- package/dist/observation/RadecGeocentric.js.map +1 -0
- package/dist/observation/RadecTopocentric.d.ts +123 -0
- package/dist/observation/RadecTopocentric.js +196 -0
- package/dist/observation/RadecTopocentric.js.map +1 -0
- package/dist/observation/index.d.ts +26 -0
- package/dist/observation/index.js +27 -0
- package/dist/observation/index.js.map +1 -0
- 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 +170 -0
- package/dist/operations/Matrix.js +405 -0
- package/dist/operations/Matrix.js.map +1 -0
- package/dist/operations/Quaternion.d.ts +7 -7
- package/dist/operations/Quaternion.js +2 -2
- package/dist/operations/Quaternion.js.map +1 -1
- package/dist/operations/Random.d.ts +40 -0
- package/dist/operations/Random.js +50 -0
- package/dist/operations/Random.js.map +1 -0
- package/dist/operations/RandomGaussianSource.d.ts +3 -3
- package/dist/operations/RandomGaussianSource.js +5 -5
- package/dist/operations/RandomGaussianSource.js.map +1 -1
- package/dist/operations/Vector.d.ts +262 -0
- package/dist/operations/Vector.js +415 -0
- package/dist/operations/Vector.js.map +1 -0
- package/dist/operations/Vector3D.d.ts +86 -0
- package/dist/operations/Vector3D.js +241 -0
- package/dist/operations/Vector3D.js.map +1 -0
- package/dist/operations/operations.d.ts +26 -0
- package/dist/operations/operations.js +27 -0
- package/dist/operations/operations.js.map +1 -0
- package/dist/optimize/ChebyshevCompressor.d.ts +3 -3
- package/dist/optimize/ChebyshevCompressor.js +8 -8
- package/dist/optimize/ChebyshevCompressor.js.map +1 -1
- package/dist/optimize/DownhillSimplex.d.ts +1 -1
- package/dist/optimize/DownhillSimplex.js +1 -1
- package/dist/optimize/GoldenSection.d.ts +2 -2
- package/dist/optimize/GoldenSection.js +3 -3
- package/dist/optimize/PolynomialRegression.d.ts +1 -1
- package/dist/optimize/PolynomialRegression.js +2 -2
- 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 +4 -4
- package/dist/optimize/SimplexEntry.js +11 -11
- package/dist/optimize/SimplexEntry.js.map +1 -1
- package/dist/orbit_determination/BatchLeastSquaresOD.d.ts +11 -11
- package/dist/orbit_determination/BatchLeastSquaresOD.js +2 -2
- package/dist/orbit_determination/BatchLeastSquaresOD.js.map +1 -1
- package/dist/orbit_determination/BatchLeastSquaresResult.d.ts +2 -2
- package/dist/orbit_determination/BatchLeastSquaresResult.js +1 -1
- package/dist/orbit_determination/GibbsIOD.d.ts +2 -2
- package/dist/orbit_determination/GibbsIOD.js +2 -2
- package/dist/orbit_determination/GibbsIOD.js.map +1 -1
- package/dist/orbit_determination/GoodingIOD.d.ts +2 -2
- package/dist/orbit_determination/GoodingIOD.js +2 -2
- 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 +4 -4
- package/dist/orbit_determination/ModifiedGoodingIOD.js +2 -2
- package/dist/orbit_determination/ModifiedGoodingIOD.js.map +1 -1
- package/dist/orbit_determination/index.d.ts +7 -0
- package/dist/orbit_determination/index.js +8 -0
- package/dist/orbit_determination/index.js.map +1 -0
- package/dist/propagator/DormandPrince54Propagator.d.ts +5 -5
- package/dist/propagator/DormandPrince54Propagator.js +9 -9
- package/dist/propagator/DormandPrince54Propagator.js.map +1 -1
- package/dist/propagator/KeplerPropagator.d.ts +6 -6
- package/dist/propagator/KeplerPropagator.js +31 -31
- package/dist/propagator/KeplerPropagator.js.map +1 -1
- package/dist/propagator/Propagator.d.ts +2 -2
- package/dist/propagator/Propagator.js +2 -2
- 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 +3 -3
- package/dist/propagator/RungeKutta4Propagator.js +2 -2
- package/dist/propagator/RungeKutta4Propagator.js.map +1 -1
- package/dist/propagator/RungeKutta89Propagator.d.ts +5 -5
- package/dist/propagator/RungeKutta89Propagator.js +1 -1
- package/dist/propagator/RungeKutta89Propagator.js.map +1 -1
- package/dist/propagator/RungeKuttaAdaptive.d.ts +4 -4
- package/dist/propagator/RungeKuttaAdaptive.js +2 -2
- package/dist/propagator/RungeKuttaAdaptive.js.map +1 -1
- package/dist/propagator/Sgp4Propagator.d.ts +6 -6
- package/dist/propagator/Sgp4Propagator.js +15 -15
- package/dist/propagator/Sgp4Propagator.js.map +1 -1
- package/dist/sgp4/index.d.ts +23 -0
- package/dist/sgp4/index.js +24 -0
- package/dist/sgp4/index.js.map +1 -0
- package/dist/sgp4/sgp4-error.d.ts +22 -0
- package/dist/sgp4/sgp4-error.js +44 -0
- package/dist/sgp4/sgp4-error.js.map +1 -0
- package/dist/sgp4/sgp4.d.ts +99 -0
- package/dist/sgp4/sgp4.js +3164 -0
- package/dist/sgp4/sgp4.js.map +1 -0
- package/dist/smoothing/ExponentialSmoothing.d.ts +2 -2
- package/dist/smoothing/ExponentialSmoothing.js +1 -1
- package/dist/time/Epoch.d.ts +44 -0
- package/dist/time/Epoch.js +109 -0
- package/dist/time/Epoch.js.map +1 -0
- package/dist/time/EpochGPS.d.ts +42 -0
- package/dist/time/EpochGPS.js +70 -0
- package/dist/time/EpochGPS.js.map +1 -0
- package/dist/time/EpochTAI.d.ts +26 -0
- package/dist/time/EpochTAI.js +27 -0
- package/dist/time/EpochTAI.js.map +1 -0
- package/dist/time/EpochTDB.d.ts +26 -0
- package/dist/time/EpochTDB.js +27 -0
- package/dist/time/EpochTDB.js.map +1 -0
- package/dist/time/EpochTT.d.ts +26 -0
- package/dist/time/EpochTT.js +27 -0
- package/dist/time/EpochTT.js.map +1 -0
- package/dist/time/EpochUTC.d.ts +59 -0
- package/dist/time/EpochUTC.js +137 -0
- package/dist/time/EpochUTC.js.map +1 -0
- package/dist/time/EpochWindow.d.ts +28 -0
- package/dist/time/EpochWindow.js +31 -0
- package/dist/time/EpochWindow.js.map +1 -0
- package/dist/time/TimeStamped.d.ts +39 -0
- package/dist/time/TimeStamped.js +42 -0
- package/dist/time/TimeStamped.js.map +1 -0
- package/dist/time/index.d.ts +8 -0
- package/dist/time/index.js +9 -0
- package/dist/time/index.js.map +1 -0
- package/dist/transforms/TransformCache.d.ts +27 -0
- package/dist/transforms/TransformCache.js +41 -0
- package/dist/transforms/TransformCache.js.map +1 -0
- package/dist/transforms/conversions.d.ts +63 -0
- package/dist/transforms/conversions.js +88 -0
- package/dist/transforms/conversions.js.map +1 -0
- package/dist/transforms/index.d.ts +1 -0
- package/dist/transforms/index.js +1 -0
- package/dist/transforms/index.js.map +1 -1
- package/dist/transforms/transforms.d.ts +166 -2
- package/dist/transforms/transforms.js +372 -1
- package/dist/transforms/transforms.js.map +1 -1
- package/dist/types/types.d.ts +675 -3
- package/dist/types/types.js +37 -1
- package/dist/types/types.js.map +1 -1
- package/dist/utils/constants.d.ts +80 -0
- package/dist/utils/constants.js +87 -0
- package/dist/utils/constants.js.map +1 -0
- package/dist/utils/create-covariance-from-tle.d.ts +18 -0
- package/dist/utils/create-covariance-from-tle.js +57 -0
- package/dist/utils/create-covariance-from-tle.js.map +1 -0
- package/dist/utils/functions.d.ts +228 -0
- package/dist/utils/functions.js +476 -0
- package/dist/utils/functions.js.map +1 -1
- package/dist/utils/index.d.ts +4 -1
- package/dist/utils/index.js +4 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/jacobian.d.ts +7 -1
- package/dist/utils/jacobian.js +7 -2
- package/dist/utils/jacobian.js.map +1 -1
- package/dist/utils/linearDistance.d.ts +8 -0
- package/dist/utils/linearDistance.js +10 -0
- package/dist/utils/linearDistance.js.map +1 -0
- package/package.json +5 -8
- package/src/body/Celestial.ts +134 -0
- package/src/body/Earth.ts +260 -0
- package/src/body/Moon.ts +556 -0
- package/src/body/NutationAngles.ts +40 -0
- package/src/body/PrecessionAngles.ts +31 -0
- package/src/body/Sun.ts +665 -0
- package/src/body/index.ts +27 -0
- package/src/body/suncalc.LICENSE.md +18 -0
- package/src/coordinate/ClassicalElements.ts +327 -0
- package/src/coordinate/EquinoctialElements.ts +189 -0
- package/src/coordinate/FormatTle.ts +214 -0
- package/src/coordinate/Geodetic.ts +186 -0
- package/src/coordinate/Hill.ts +2 -2
- package/src/coordinate/ITRF.ts +146 -0
- package/src/coordinate/J2000.ts +130 -0
- package/src/coordinate/RIC.ts +87 -0
- package/src/coordinate/RelativeState.ts +101 -0
- package/src/coordinate/StateVector.ts +123 -0
- package/src/coordinate/TEME.ts +97 -0
- package/src/coordinate/Tle.ts +1024 -0
- package/src/coordinate/index.ts +11 -0
- package/src/coordinate/tle-format-data.ts +47 -0
- package/src/covariance/CovarianceSample.ts +117 -19
- package/src/covariance/StateCovariance.ts +2 -2
- package/src/covariance/index.ts +2 -0
- package/src/data/DataHandler.ts +88 -0
- package/src/data/values/Egm96Data.ts +75 -0
- package/src/data/values/HpAtmosphereData.ts +76 -0
- package/src/data/values/HpAtmosphereResult.ts +41 -0
- package/src/data/values/Iau1980Data.ts +63 -0
- package/src/data/values/LeapSecond.ts +37 -0
- package/src/data/values/LeapSecondData.ts +113 -0
- package/src/data/values/egm96.ts +728 -0
- package/src/data/values/hpAtmosphere.ts +79 -0
- package/src/data/values/iau1980.ts +32 -0
- package/src/enums/AngularDiameterMethod.ts +28 -0
- package/src/enums/AngularDistanceMethod.ts +28 -0
- package/src/enums/OrbitRegime.ts +31 -0
- package/src/enums/PassType.ts +29 -0
- package/src/enums/Sgp4OpsMode.ts +27 -0
- package/src/enums/index.ts +5 -0
- package/src/force/AtmosphericDrag.ts +2 -4
- package/src/force/EarthGravity.ts +2 -2
- package/src/force/Force.ts +2 -2
- package/src/force/ForceModel.ts +2 -2
- package/src/force/Gravity.ts +2 -2
- package/src/force/SolarRadiationPressure.ts +2 -2
- package/src/force/ThirdBodyGravity.ts +2 -2
- package/src/force/Thrust.ts +2 -2
- package/src/interfaces/BaseObjectParams.ts +33 -0
- package/src/interfaces/ClassicalElementsParams.ts +35 -0
- package/src/interfaces/EquinoctialElementsParams.ts +37 -0
- package/src/interfaces/GroundPositionParams.ts +30 -0
- package/src/interfaces/OmmFormat.ts +63 -0
- package/src/interfaces/OptionsParams.ts +3 -0
- package/src/interfaces/RfSensorParams.ts +1 -1
- package/src/interfaces/SatelliteParams.ts +20 -0
- package/src/interfaces/SensorParams.ts +39 -0
- package/src/interfaces/StarObjectParams.ts +11 -0
- package/src/interfaces/TimeVariables.ts +7 -0
- package/src/interfaces/index.ts +8 -0
- package/src/interpolator/ChebyshevCoefficients.ts +5 -5
- package/src/interpolator/ChebyshevInterpolator.ts +10 -10
- package/src/interpolator/CubicSpline.ts +2 -2
- package/src/interpolator/CubicSplineInterpolator.ts +8 -8
- package/src/interpolator/FieldInterpolator.ts +1 -1
- package/src/interpolator/Interpolator.ts +2 -2
- package/src/interpolator/LagrangeInterpolator.ts +7 -7
- package/src/interpolator/StateInterpolator.ts +2 -2
- package/src/interpolator/VerletBlendInterpolator.ts +2 -2
- package/src/main.ts +15 -5
- package/src/maneuver/TwoBurnOrbitTransfer.ts +2 -2
- package/src/maneuver/Waypoint.ts +2 -2
- package/src/objects/BaseObject.ts +171 -0
- package/src/objects/DetailedSatellite.ts +5 -4
- package/src/objects/DetailedSensor.ts +3 -2
- package/src/objects/GroundObject.ts +176 -0
- package/src/objects/LandObject.ts +3 -2
- package/src/objects/Marker.ts +2 -2
- package/src/objects/RfSensor.ts +1 -2
- package/src/objects/Satellite.ts +552 -0
- package/src/objects/Sensor.ts +279 -0
- package/src/objects/Star.ts +96 -0
- package/src/objects/index.ts +5 -0
- package/src/observation/Observation.ts +2 -2
- package/src/observation/ObservationOptical.ts +7 -7
- package/src/observation/ObservationRadar.ts +10 -6
- package/src/observation/ObservationUtils.ts +31 -2
- package/src/observation/PropagatorPairs.ts +3 -3
- package/src/observation/RAE.ts +261 -0
- package/src/observation/RadecGeocentric.ts +206 -0
- package/src/observation/RadecTopocentric.ts +241 -0
- package/src/observation/index.ts +27 -0
- package/src/operations/BoxMuller.ts +2 -2
- package/src/operations/EulerAngles.ts +2 -2
- package/src/operations/Matrix.ts +473 -0
- package/src/operations/Quaternion.ts +7 -7
- package/src/operations/Random.ts +54 -0
- package/src/operations/RandomGaussianSource.ts +5 -5
- package/src/operations/Vector.ts +484 -0
- package/src/operations/Vector3D.ts +289 -0
- package/src/operations/operations.ts +27 -0
- package/src/optimize/ChebyshevCompressor.ts +6 -6
- package/src/optimize/DownhillSimplex.ts +1 -1
- package/src/optimize/GoldenSection.ts +3 -3
- package/src/optimize/PolynomialRegression.ts +2 -2
- package/src/optimize/PolynomicalRegressionResult.ts +1 -1
- package/src/optimize/SimpleLinearRegression.ts +1 -1
- package/src/optimize/SimplexEntry.ts +9 -9
- package/src/orbit_determination/BatchLeastSquaresOD.ts +11 -11
- package/src/orbit_determination/BatchLeastSquaresResult.ts +2 -2
- package/src/orbit_determination/GibbsIOD.ts +4 -2
- package/src/orbit_determination/GoodingIOD.ts +2 -2
- package/src/orbit_determination/HerrickGibbsIOD.ts +2 -2
- package/src/orbit_determination/LambertIOD.ts +2 -2
- package/src/orbit_determination/ModifiedGoodingIOD.ts +4 -4
- package/src/orbit_determination/index.ts +7 -0
- package/src/propagator/DormandPrince54Propagator.ts +9 -9
- package/src/propagator/KeplerPropagator.ts +31 -31
- package/src/propagator/Propagator.ts +2 -2
- package/src/propagator/RkCheckpoint.ts +2 -2
- package/src/propagator/RkResult.ts +2 -2
- package/src/propagator/RungeKutta4Propagator.ts +3 -3
- package/src/propagator/RungeKutta89Propagator.ts +5 -5
- package/src/propagator/RungeKuttaAdaptive.ts +4 -4
- package/src/propagator/Sgp4Propagator.ts +14 -14
- package/src/sgp4/index.ts +24 -0
- package/src/sgp4/sgp4-error.ts +53 -0
- package/src/sgp4/sgp4.LICENSE.md +28 -0
- package/src/sgp4/sgp4.ts +3983 -0
- package/src/smoothing/ExponentialSmoothing.ts +2 -2
- package/src/time/Epoch.ts +128 -0
- package/src/time/EpochGPS.ts +76 -0
- package/src/time/EpochTAI.ts +27 -0
- package/src/time/EpochTDB.ts +27 -0
- package/src/time/EpochTT.ts +27 -0
- package/src/time/EpochUTC.ts +188 -0
- package/src/time/EpochWindow.ts +33 -0
- package/src/time/TimeStamped.ts +46 -0
- package/src/time/index.ts +8 -0
- package/src/transforms/TransformCache.ts +46 -0
- package/src/transforms/conversions.ts +98 -0
- package/src/transforms/index.ts +1 -0
- package/src/transforms/transforms.ts +478 -2
- package/src/types/types.ts +722 -3
- package/src/utils/constants.ts +113 -0
- package/src/utils/create-covariance-from-tle.ts +75 -0
- package/src/utils/functions.ts +562 -0
- package/src/utils/index.ts +4 -1
- package/src/utils/jacobian.ts +7 -3
- package/src/utils/linearDistance.ts +11 -0
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author @thkruz Theodore Kruczek
|
|
3
|
+
* @description Orbital Object ToolKit (ootk) is a collection of tools for working
|
|
4
|
+
* with satellites and other orbital objects.
|
|
5
|
+
* @license AGPL-3.0-or-later
|
|
6
|
+
* @copyright (c) 2025 Kruczek Labs LLC
|
|
7
|
+
*
|
|
8
|
+
* Many of the classes are based off of the work of @david-rc-dayton and his
|
|
9
|
+
* Pious Squid library (https://github.com/david-rc-dayton/pious_squid) which
|
|
10
|
+
* is licensed under the MIT license.
|
|
11
|
+
*
|
|
12
|
+
* Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
|
|
13
|
+
* terms of the GNU Affero General Public License as published by the Free Software
|
|
14
|
+
* Foundation, either version 3 of the License, or (at your option) any later version.
|
|
15
|
+
*
|
|
16
|
+
* Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
17
|
+
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
18
|
+
* See the GNU Affero General Public License for more details.
|
|
19
|
+
*
|
|
20
|
+
* You should have received a copy of the GNU Affero General Public License along with
|
|
21
|
+
* Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
/* eslint-disable no-undefined */
|
|
25
|
+
import { ITRF } from '../coordinate/ITRF.js';
|
|
26
|
+
import { J2000 } from '../coordinate/J2000.js';
|
|
27
|
+
import { AngularDistanceMethod } from '../enums/AngularDistanceMethod.js';
|
|
28
|
+
import { Degrees, Kilometers, KilometersPerSecond, Radians } from '../main.js';
|
|
29
|
+
import { Vector3D } from '../operations/Vector3D.js';
|
|
30
|
+
import { EpochUTC } from '../time/EpochUTC.js';
|
|
31
|
+
import { DEG2RAD, halfPi, RAD2DEG, TAU } from '../utils/constants.js';
|
|
32
|
+
import { angularDistance } from '../utils/functions.js';
|
|
33
|
+
|
|
34
|
+
// / Range, azimuth, and elevation.
|
|
35
|
+
export class RAE {
|
|
36
|
+
constructor(
|
|
37
|
+
public epoch: EpochUTC,
|
|
38
|
+
public rng: Kilometers,
|
|
39
|
+
public azRad: Radians,
|
|
40
|
+
public elRad: Radians,
|
|
41
|
+
/** The range rate of the satellite relative to the observer in kilometers per second. */
|
|
42
|
+
public rngRate?: number,
|
|
43
|
+
/** The azimuth rate of the satellite relative to the observer in radians per second. */
|
|
44
|
+
public azRateRad?: number,
|
|
45
|
+
/** The elevation rate of the satellite relative to the observer in radians per second. */
|
|
46
|
+
public elRateRad?: number,
|
|
47
|
+
) {
|
|
48
|
+
// Do nothing
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// / Create a new [Razel] object, using degrees for the angular values.
|
|
52
|
+
static fromDegrees(
|
|
53
|
+
epoch: EpochUTC,
|
|
54
|
+
range: Kilometers,
|
|
55
|
+
azimuth: Degrees,
|
|
56
|
+
elevation: Degrees,
|
|
57
|
+
rangeRate?: number,
|
|
58
|
+
azimuthRate?: number,
|
|
59
|
+
elevationRate?: number,
|
|
60
|
+
): RAE {
|
|
61
|
+
const azimuthRateRad = azimuthRate ? azimuthRate * DEG2RAD : undefined;
|
|
62
|
+
const elevationRateRad = elevationRate ? elevationRate * DEG2RAD : undefined;
|
|
63
|
+
|
|
64
|
+
return new RAE(
|
|
65
|
+
epoch,
|
|
66
|
+
range,
|
|
67
|
+
(azimuth * DEG2RAD) as Radians,
|
|
68
|
+
(elevation * DEG2RAD) as Radians,
|
|
69
|
+
rangeRate,
|
|
70
|
+
azimuthRateRad,
|
|
71
|
+
elevationRateRad,
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Create a [Razel] object from an inertial [state] and [site] vector.
|
|
77
|
+
* @param state The inertial [state] vector.
|
|
78
|
+
* @param site The observer [site] vector.
|
|
79
|
+
* @returns A new [Razel] object.
|
|
80
|
+
*/
|
|
81
|
+
static fromStateVector(state: J2000, site: J2000): RAE {
|
|
82
|
+
const stateEcef = state.toITRF();
|
|
83
|
+
const siteEcef = site.toITRF();
|
|
84
|
+
const po2 = halfPi;
|
|
85
|
+
const r = stateEcef.position.subtract(siteEcef.position);
|
|
86
|
+
const rDot = stateEcef.velocity;
|
|
87
|
+
const geo = siteEcef.toGeodetic();
|
|
88
|
+
const p = r.rotZ(geo.lon).rotY((po2 - geo.lat) as Radians);
|
|
89
|
+
const pDot = rDot.rotZ(geo.lon).rotY((po2 - geo.lat) as Radians);
|
|
90
|
+
const pS = p.x;
|
|
91
|
+
const pE = p.y;
|
|
92
|
+
const pZ = p.z;
|
|
93
|
+
const pSDot = pDot.x;
|
|
94
|
+
const pEDot = pDot.y;
|
|
95
|
+
const pZDot = pDot.z;
|
|
96
|
+
const pMag = p.magnitude();
|
|
97
|
+
const pSEMag = Math.sqrt(pS * pS + pE * pE);
|
|
98
|
+
const elevation = Math.asin(pZ / pMag);
|
|
99
|
+
let azimuth;
|
|
100
|
+
|
|
101
|
+
if (elevation !== po2) {
|
|
102
|
+
azimuth = Math.atan2(-pE, pS) + Math.PI;
|
|
103
|
+
} else {
|
|
104
|
+
azimuth = Math.atan2(-pEDot, pSDot) + Math.PI;
|
|
105
|
+
}
|
|
106
|
+
const rangeRate = p.dot(pDot) / pMag;
|
|
107
|
+
const azimuthRate = (pSDot * pE - pEDot * pS) / (pS * pS + pE * pE);
|
|
108
|
+
const elevationRate = (pZDot - rangeRate * Math.sin(elevation)) / pSEMag;
|
|
109
|
+
|
|
110
|
+
return new RAE(
|
|
111
|
+
state.epoch,
|
|
112
|
+
pMag,
|
|
113
|
+
(azimuth % TAU) as Radians,
|
|
114
|
+
elevation as Radians,
|
|
115
|
+
rangeRate,
|
|
116
|
+
azimuthRate,
|
|
117
|
+
elevationRate,
|
|
118
|
+
);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Gets the azimuth in degrees.
|
|
123
|
+
* @returns The azimuth in degrees.
|
|
124
|
+
*/
|
|
125
|
+
get az(): Degrees {
|
|
126
|
+
return this.azRad * RAD2DEG as Degrees;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Gets the elevation angle in degrees.
|
|
131
|
+
* @returns The elevation angle in degrees.
|
|
132
|
+
*/
|
|
133
|
+
get el(): Degrees {
|
|
134
|
+
return this.elRad * RAD2DEG as Degrees;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Gets the azimuth rate in degrees per second.
|
|
139
|
+
* @returns The azimuth rate in degrees per second, or undefined if it is not available.
|
|
140
|
+
*/
|
|
141
|
+
get azRate(): number | undefined {
|
|
142
|
+
return this.azRateRad ? this.azRateRad * RAD2DEG : undefined;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Gets the elevation rate in degrees per second.
|
|
147
|
+
* @returns The elevation rate in degrees per second, or undefined if the elevation rate is not set.
|
|
148
|
+
*/
|
|
149
|
+
get elRate(): number | undefined {
|
|
150
|
+
return this.elRateRad ? this.elRateRad * RAD2DEG : undefined;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
toString(): string {
|
|
154
|
+
return [
|
|
155
|
+
'[RazEl]',
|
|
156
|
+
` Epoch: ${this.epoch}`,
|
|
157
|
+
` Azimuth: ${this.az.toFixed(4)}°`,
|
|
158
|
+
` Elevation: ${this.el.toFixed(4)}°`,
|
|
159
|
+
` Range: ${this.rng.toFixed(3)} km`,
|
|
160
|
+
].join('\n');
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Return the position relative to the observer [site].
|
|
165
|
+
*
|
|
166
|
+
* An optional azimuth [az] _(rad)_ and elevation [el] _(rad)_ value can be
|
|
167
|
+
* passed to override the values contained in this observation.
|
|
168
|
+
* @param site The observer [site].
|
|
169
|
+
* @param azRad Azimuth _(rad)_.
|
|
170
|
+
* @param elRad Elevation _(rad)_.
|
|
171
|
+
* @returns A [Vector3D] object.
|
|
172
|
+
*/
|
|
173
|
+
position(site: J2000, azRad?: Radians, elRad?: Radians): Vector3D<Kilometers> {
|
|
174
|
+
const ecef = site.toITRF();
|
|
175
|
+
const geo = ecef.toGeodetic();
|
|
176
|
+
const po2 = halfPi;
|
|
177
|
+
const newAz = azRad ?? this.azRad;
|
|
178
|
+
const newEl = elRad ?? this.elRad;
|
|
179
|
+
const sAz = Math.sin(newAz);
|
|
180
|
+
const cAz = Math.cos(newAz);
|
|
181
|
+
const sEl = Math.sin(newEl);
|
|
182
|
+
const cEl = Math.cos(newEl);
|
|
183
|
+
const pSez = new Vector3D<Kilometers>(
|
|
184
|
+
(-this.rng * cEl * cAz) as Kilometers,
|
|
185
|
+
(this.rng * cEl * sAz) as Kilometers,
|
|
186
|
+
(this.rng * sEl) as Kilometers,
|
|
187
|
+
);
|
|
188
|
+
const rEcef = pSez
|
|
189
|
+
.rotY(-(po2 - geo.lat) as Radians)
|
|
190
|
+
.rotZ(-geo.lon as Radians)
|
|
191
|
+
.add(ecef.position);
|
|
192
|
+
|
|
193
|
+
return new ITRF(this.epoch, rEcef, Vector3D.origin as Vector3D<KilometersPerSecond>).toJ2000().position;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Convert this observation into a [J2000] state vector.
|
|
198
|
+
*
|
|
199
|
+
* This will throw an error if the [rangeRate], [elevationRate], or
|
|
200
|
+
* [azimuthRate] are not defined.
|
|
201
|
+
* @param site The observer [site].
|
|
202
|
+
* @returns A [J2000] state vector.
|
|
203
|
+
*/
|
|
204
|
+
toStateVector(site: J2000): J2000 {
|
|
205
|
+
// If the rates are not defined then assume stationary
|
|
206
|
+
this.rngRate ??= 0;
|
|
207
|
+
this.elRateRad ??= 0;
|
|
208
|
+
this.azRateRad ??= 0;
|
|
209
|
+
|
|
210
|
+
const ecef = site.toITRF();
|
|
211
|
+
const geo = ecef.toGeodetic();
|
|
212
|
+
const po2 = halfPi;
|
|
213
|
+
const sAz = Math.sin(this.azRad);
|
|
214
|
+
const cAz = Math.cos(this.azRad);
|
|
215
|
+
const sEl = Math.sin(this.elRad);
|
|
216
|
+
const cEl = Math.cos(this.elRad);
|
|
217
|
+
const pSez = new Vector3D<Kilometers>(
|
|
218
|
+
(-this.rng * cEl * cAz) as Kilometers,
|
|
219
|
+
(this.rng * cEl * sAz) as Kilometers,
|
|
220
|
+
(this.rng * sEl) as Kilometers,
|
|
221
|
+
);
|
|
222
|
+
const pDotSez = new Vector3D<Kilometers>(
|
|
223
|
+
(-this.rngRate * cEl * cAz +
|
|
224
|
+
this.rng * sEl * cAz * this.elRateRad +
|
|
225
|
+
this.rng * cEl * sAz * this.azRateRad) as Kilometers,
|
|
226
|
+
(this.rngRate * cEl * sAz -
|
|
227
|
+
this.rng * sEl * sAz * this.elRateRad +
|
|
228
|
+
this.rng * cEl * cAz * this.azRateRad) as Kilometers,
|
|
229
|
+
(this.rngRate * sEl + this.rng * cEl * this.elRateRad) as Kilometers,
|
|
230
|
+
);
|
|
231
|
+
const pEcef = pSez.rotY(-(po2 - geo.lat) as Radians).rotZ(-geo.lon as Radians);
|
|
232
|
+
const pDotEcef = pDotSez
|
|
233
|
+
.rotY(-(po2 - geo.lat) as Radians)
|
|
234
|
+
.rotZ(-geo.lon as Radians) as unknown as Vector3D<KilometersPerSecond>;
|
|
235
|
+
const rEcef = pEcef.add(ecef.position);
|
|
236
|
+
|
|
237
|
+
return new ITRF(this.epoch, rEcef, pDotEcef).toJ2000();
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* Calculate the angular distance _(rad)_ between this and another [Razel]
|
|
242
|
+
* object.
|
|
243
|
+
* @param razel The other [Razel] object.
|
|
244
|
+
* @param method The angular distance method to use.
|
|
245
|
+
* @returns The angular distance _(rad)_.
|
|
246
|
+
*/
|
|
247
|
+
angle(razel: RAE, method: AngularDistanceMethod = AngularDistanceMethod.Cosine): number {
|
|
248
|
+
return angularDistance(this.azRad, this.elRad, razel.azRad, razel.elRad, method);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* Calculate the angular distance _(°)_ between this and another [Razel]
|
|
253
|
+
* object.
|
|
254
|
+
* @param razel The other [Razel] object.
|
|
255
|
+
* @param method The angular distance method to use.
|
|
256
|
+
* @returns The angular distance _(°)_.
|
|
257
|
+
*/
|
|
258
|
+
angleDegrees(razel: RAE, method: AngularDistanceMethod = AngularDistanceMethod.Cosine): number {
|
|
259
|
+
return this.angle(razel, method) * RAD2DEG;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author @thkruz Theodore Kruczek
|
|
3
|
+
* @description Orbital Object ToolKit (ootk) is a collection of tools for working
|
|
4
|
+
* with satellites and other orbital objects.
|
|
5
|
+
* @license AGPL-3.0-or-later
|
|
6
|
+
* @copyright (c) 2025 Kruczek Labs LLC
|
|
7
|
+
*
|
|
8
|
+
* Many of the classes are based off of the work of @david-rc-dayton and his
|
|
9
|
+
* Pious Squid library (https://github.com/david-rc-dayton/pious_squid) which
|
|
10
|
+
* is licensed under the MIT license.
|
|
11
|
+
*
|
|
12
|
+
* Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
|
|
13
|
+
* terms of the GNU Affero General Public License as published by the Free Software
|
|
14
|
+
* Foundation, either version 3 of the License, or (at your option) any later version.
|
|
15
|
+
*
|
|
16
|
+
* Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
17
|
+
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
18
|
+
* See the GNU Affero General Public License for more details.
|
|
19
|
+
*
|
|
20
|
+
* You should have received a copy of the GNU Affero General Public License along with
|
|
21
|
+
* Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
import { Degrees, DegreesPerSecond, Kilometers, KilometersPerSecond, Radians, RadiansPerSecond } from '../main.js';
|
|
25
|
+
import { J2000 } from '../coordinate/J2000.js';
|
|
26
|
+
import { AngularDistanceMethod } from '../enums/AngularDistanceMethod.js';
|
|
27
|
+
import { Vector3D } from '../operations/Vector3D.js';
|
|
28
|
+
import { EpochUTC } from '../time/EpochUTC.js';
|
|
29
|
+
import { DEG2RAD, RAD2DEG, TAU } from '../utils/constants.js';
|
|
30
|
+
import { angularDistance } from '../utils/functions.js';
|
|
31
|
+
import { radecToPosition, radecToVelocity } from './ObservationUtils.js';
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Represents a geocentric right ascension and declination observation.
|
|
35
|
+
*
|
|
36
|
+
* In geocentric coordinates, observations are considered from the Earth's center. This approach simplifies calculations
|
|
37
|
+
* for distant celestial objects, as it assumes a uniform observation point that ignores the observer's specific
|
|
38
|
+
* location on Earth.
|
|
39
|
+
*/
|
|
40
|
+
export class RadecGeocentric {
|
|
41
|
+
constructor(
|
|
42
|
+
public epoch: EpochUTC,
|
|
43
|
+
public rightAscension: Radians,
|
|
44
|
+
public declination: Radians,
|
|
45
|
+
public range?: Kilometers,
|
|
46
|
+
public rightAscensionRate?: RadiansPerSecond | null,
|
|
47
|
+
public declinationRate?: RadiansPerSecond | null,
|
|
48
|
+
public rangeRate?: KilometersPerSecond | null,
|
|
49
|
+
) {
|
|
50
|
+
// Nothing to do here.
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Creates a RadecGeocentric object from the given parameters in degrees.
|
|
55
|
+
* @param epoch - The epoch in UTC.
|
|
56
|
+
* @param rightAscensionDegrees - The right ascension in degrees.
|
|
57
|
+
* @param declinationDegrees - The declination in degrees.
|
|
58
|
+
* @param range - The range in kilometers (optional).
|
|
59
|
+
* @param rightAscensionRateDegrees - The right ascension rate in degrees per second (optional).
|
|
60
|
+
* @param declinationRateDegrees - The declination rate in degrees per second (optional).
|
|
61
|
+
* @param rangeRate - The range rate in kilometers per second (optional).
|
|
62
|
+
* @returns A new RadecGeocentric object.
|
|
63
|
+
*/
|
|
64
|
+
static fromDegrees(
|
|
65
|
+
epoch: EpochUTC,
|
|
66
|
+
rightAscensionDegrees: Degrees,
|
|
67
|
+
declinationDegrees: Degrees,
|
|
68
|
+
range?: Kilometers,
|
|
69
|
+
rightAscensionRateDegrees?: Degrees,
|
|
70
|
+
declinationRateDegrees?: Degrees,
|
|
71
|
+
rangeRate?: KilometersPerSecond,
|
|
72
|
+
): RadecGeocentric {
|
|
73
|
+
const rightAscensionRate = rightAscensionRateDegrees
|
|
74
|
+
? rightAscensionRateDegrees * DEG2RAD as RadiansPerSecond
|
|
75
|
+
: null;
|
|
76
|
+
const declinationRate = declinationRateDegrees ? declinationRateDegrees * DEG2RAD as RadiansPerSecond : null;
|
|
77
|
+
|
|
78
|
+
return new RadecGeocentric(
|
|
79
|
+
epoch,
|
|
80
|
+
rightAscensionDegrees * DEG2RAD as Radians,
|
|
81
|
+
declinationDegrees * DEG2RAD as Radians,
|
|
82
|
+
range,
|
|
83
|
+
rightAscensionRate,
|
|
84
|
+
declinationRate,
|
|
85
|
+
rangeRate,
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Creates a RadecGeocentric object from a state vector in J2000 coordinates.
|
|
91
|
+
* @param state - The J2000 state vector.
|
|
92
|
+
* @returns A new RadecGeocentric object.
|
|
93
|
+
*/
|
|
94
|
+
static fromStateVector(state: J2000): RadecGeocentric {
|
|
95
|
+
const rI = state.position.x;
|
|
96
|
+
const rJ = state.position.y;
|
|
97
|
+
const rK = state.position.z;
|
|
98
|
+
const vI = state.velocity.x;
|
|
99
|
+
const vJ = state.velocity.y;
|
|
100
|
+
const vK = state.velocity.z;
|
|
101
|
+
const rMag = state.position.magnitude();
|
|
102
|
+
const declination = Math.asin(rK / rMag);
|
|
103
|
+
const rIJMag = Math.sqrt(rI * rI + rJ * rJ);
|
|
104
|
+
let rightAscension;
|
|
105
|
+
|
|
106
|
+
if (rIJMag !== 0) {
|
|
107
|
+
rightAscension = Math.atan2(rJ, rI);
|
|
108
|
+
} else {
|
|
109
|
+
rightAscension = Math.atan2(vJ, vI);
|
|
110
|
+
}
|
|
111
|
+
const rangeRate = state.position.dot(state.velocity) / rMag as KilometersPerSecond;
|
|
112
|
+
const rightAscensionRate = (vI * rJ - vJ * rI) / (-(rJ * rJ) - rI * rI);
|
|
113
|
+
const declinationRate = (vK - rangeRate * (rK / rMag)) / rIJMag;
|
|
114
|
+
|
|
115
|
+
return new RadecGeocentric(
|
|
116
|
+
state.epoch,
|
|
117
|
+
rightAscension % TAU as Radians,
|
|
118
|
+
declination as Radians,
|
|
119
|
+
rMag,
|
|
120
|
+
rightAscensionRate as RadiansPerSecond,
|
|
121
|
+
declinationRate as RadiansPerSecond,
|
|
122
|
+
rangeRate,
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Gets the right ascension in degrees.
|
|
128
|
+
* @returns The right ascension in degrees.
|
|
129
|
+
*/
|
|
130
|
+
get rightAscensionDegrees(): Degrees {
|
|
131
|
+
return this.rightAscension * RAD2DEG as Degrees;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Gets the declination in degrees.
|
|
136
|
+
* @returns The declination in degrees.
|
|
137
|
+
*/
|
|
138
|
+
get declinationDegrees(): Degrees {
|
|
139
|
+
return this.declination * RAD2DEG as Degrees;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Gets the right ascension rate in degrees per second.
|
|
144
|
+
* @returns The right ascension rate in degrees per second, or null if it is not available.
|
|
145
|
+
*/
|
|
146
|
+
get rightAscensionRateDegrees(): DegreesPerSecond | null {
|
|
147
|
+
return this.rightAscensionRate ? this.rightAscensionRate * RAD2DEG as DegreesPerSecond : null;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Gets the rate of change of declination in degrees per second.
|
|
152
|
+
* @returns The rate of change of declination in degrees per second, or null if not available.
|
|
153
|
+
*/
|
|
154
|
+
get declinationRateDegrees(): DegreesPerSecond | null {
|
|
155
|
+
return this.declinationRate ? this.declinationRate * RAD2DEG as DegreesPerSecond : null;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Calculates the position vector in geocentric coordinates.
|
|
160
|
+
* @param range - The range in kilometers (optional). If not provided, it uses the default range or 1.0 kilometer.
|
|
161
|
+
* @returns The position vector in geocentric coordinates.
|
|
162
|
+
*/
|
|
163
|
+
position(range?: Kilometers): Vector3D<Kilometers> {
|
|
164
|
+
const r = range ?? this.range ?? 1.0 as Kilometers;
|
|
165
|
+
|
|
166
|
+
return radecToPosition(this.rightAscension, this.declination, r);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Calculates the velocity vector of the celestial object.
|
|
171
|
+
* @param range - The range of the celestial object in kilometers. If not provided, it uses the stored range value.
|
|
172
|
+
* @param rangeRate - The range rate of the celestial object in kilometers per second.
|
|
173
|
+
* If not provided, it uses the stored range rate value.
|
|
174
|
+
* @returns The velocity vector of the celestial object in kilometers per second.
|
|
175
|
+
* @throws Error if the right ascension rate or declination rate is missing.
|
|
176
|
+
*/
|
|
177
|
+
velocity(range?: Kilometers, rangeRate?: KilometersPerSecond): Vector3D<KilometersPerSecond> {
|
|
178
|
+
if (!this.rightAscensionRate || !this.declinationRate) {
|
|
179
|
+
throw new Error('Velocity unsolvable, missing ra/dec rates.');
|
|
180
|
+
}
|
|
181
|
+
const r = range ?? this.range ?? 1.0 as Kilometers;
|
|
182
|
+
const rd = rangeRate ?? this.rangeRate ?? 0.0 as KilometersPerSecond;
|
|
183
|
+
|
|
184
|
+
return radecToVelocity(this.rightAscension, this.declination, r, this.rightAscensionRate, this.declinationRate, rd);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* Calculates the angular distance between two celestial coordinates (RA and Dec).
|
|
189
|
+
* @param radec - The celestial coordinates to compare with.
|
|
190
|
+
* @param method - The method to use for calculating the angular distance. Default is `AngularDistanceMethod.Cosine`.
|
|
191
|
+
* @returns The angular distance between the two celestial coordinates in radians.
|
|
192
|
+
*/
|
|
193
|
+
angle(radec: RadecGeocentric, method: AngularDistanceMethod = AngularDistanceMethod.Cosine): Radians {
|
|
194
|
+
return angularDistance(this.rightAscension, this.declination, radec.rightAscension, radec.declination, method);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Calculates the angle in degrees between two RadecGeocentric objects.
|
|
199
|
+
* @param radec - The RadecGeocentric object to calculate the angle with.
|
|
200
|
+
* @param method - The method to use for calculating the angular distance. Default is AngularDistanceMethod.Cosine.
|
|
201
|
+
* @returns The angle in degrees.
|
|
202
|
+
*/
|
|
203
|
+
angleDegrees(radec: RadecGeocentric, method: AngularDistanceMethod = AngularDistanceMethod.Cosine): Degrees {
|
|
204
|
+
return this.angle(radec, method) * RAD2DEG as Degrees;
|
|
205
|
+
}
|
|
206
|
+
}
|