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,111 @@
|
|
|
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
|
+
import { Degrees, DegreesPerSecond, Kilometers, KilometersPerSecond, Radians, RadiansPerSecond } from '../main.js';
|
|
24
|
+
import { J2000 } from '../coordinate/J2000.js';
|
|
25
|
+
import { AngularDistanceMethod } from '../enums/AngularDistanceMethod.js';
|
|
26
|
+
import { Vector3D } from '../operations/Vector3D.js';
|
|
27
|
+
import { EpochUTC } from '../time/EpochUTC.js';
|
|
28
|
+
/**
|
|
29
|
+
* Represents a geocentric right ascension and declination observation.
|
|
30
|
+
*
|
|
31
|
+
* In geocentric coordinates, observations are considered from the Earth's center. This approach simplifies calculations
|
|
32
|
+
* for distant celestial objects, as it assumes a uniform observation point that ignores the observer's specific
|
|
33
|
+
* location on Earth.
|
|
34
|
+
*/
|
|
35
|
+
export declare class RadecGeocentric {
|
|
36
|
+
epoch: EpochUTC;
|
|
37
|
+
rightAscension: Radians;
|
|
38
|
+
declination: Radians;
|
|
39
|
+
range?: Kilometers | undefined;
|
|
40
|
+
rightAscensionRate?: (RadiansPerSecond | null) | undefined;
|
|
41
|
+
declinationRate?: (RadiansPerSecond | null) | undefined;
|
|
42
|
+
rangeRate?: (KilometersPerSecond | null) | undefined;
|
|
43
|
+
constructor(epoch: EpochUTC, rightAscension: Radians, declination: Radians, range?: Kilometers | undefined, rightAscensionRate?: (RadiansPerSecond | null) | undefined, declinationRate?: (RadiansPerSecond | null) | undefined, rangeRate?: (KilometersPerSecond | null) | undefined);
|
|
44
|
+
/**
|
|
45
|
+
* Creates a RadecGeocentric object from the given parameters in degrees.
|
|
46
|
+
* @param epoch - The epoch in UTC.
|
|
47
|
+
* @param rightAscensionDegrees - The right ascension in degrees.
|
|
48
|
+
* @param declinationDegrees - The declination in degrees.
|
|
49
|
+
* @param range - The range in kilometers (optional).
|
|
50
|
+
* @param rightAscensionRateDegrees - The right ascension rate in degrees per second (optional).
|
|
51
|
+
* @param declinationRateDegrees - The declination rate in degrees per second (optional).
|
|
52
|
+
* @param rangeRate - The range rate in kilometers per second (optional).
|
|
53
|
+
* @returns A new RadecGeocentric object.
|
|
54
|
+
*/
|
|
55
|
+
static fromDegrees(epoch: EpochUTC, rightAscensionDegrees: Degrees, declinationDegrees: Degrees, range?: Kilometers, rightAscensionRateDegrees?: Degrees, declinationRateDegrees?: Degrees, rangeRate?: KilometersPerSecond): RadecGeocentric;
|
|
56
|
+
/**
|
|
57
|
+
* Creates a RadecGeocentric object from a state vector in J2000 coordinates.
|
|
58
|
+
* @param state - The J2000 state vector.
|
|
59
|
+
* @returns A new RadecGeocentric object.
|
|
60
|
+
*/
|
|
61
|
+
static fromStateVector(state: J2000): RadecGeocentric;
|
|
62
|
+
/**
|
|
63
|
+
* Gets the right ascension in degrees.
|
|
64
|
+
* @returns The right ascension in degrees.
|
|
65
|
+
*/
|
|
66
|
+
get rightAscensionDegrees(): Degrees;
|
|
67
|
+
/**
|
|
68
|
+
* Gets the declination in degrees.
|
|
69
|
+
* @returns The declination in degrees.
|
|
70
|
+
*/
|
|
71
|
+
get declinationDegrees(): Degrees;
|
|
72
|
+
/**
|
|
73
|
+
* Gets the right ascension rate in degrees per second.
|
|
74
|
+
* @returns The right ascension rate in degrees per second, or null if it is not available.
|
|
75
|
+
*/
|
|
76
|
+
get rightAscensionRateDegrees(): DegreesPerSecond | null;
|
|
77
|
+
/**
|
|
78
|
+
* Gets the rate of change of declination in degrees per second.
|
|
79
|
+
* @returns The rate of change of declination in degrees per second, or null if not available.
|
|
80
|
+
*/
|
|
81
|
+
get declinationRateDegrees(): DegreesPerSecond | null;
|
|
82
|
+
/**
|
|
83
|
+
* Calculates the position vector in geocentric coordinates.
|
|
84
|
+
* @param range - The range in kilometers (optional). If not provided, it uses the default range or 1.0 kilometer.
|
|
85
|
+
* @returns The position vector in geocentric coordinates.
|
|
86
|
+
*/
|
|
87
|
+
position(range?: Kilometers): Vector3D<Kilometers>;
|
|
88
|
+
/**
|
|
89
|
+
* Calculates the velocity vector of the celestial object.
|
|
90
|
+
* @param range - The range of the celestial object in kilometers. If not provided, it uses the stored range value.
|
|
91
|
+
* @param rangeRate - The range rate of the celestial object in kilometers per second.
|
|
92
|
+
* If not provided, it uses the stored range rate value.
|
|
93
|
+
* @returns The velocity vector of the celestial object in kilometers per second.
|
|
94
|
+
* @throws Error if the right ascension rate or declination rate is missing.
|
|
95
|
+
*/
|
|
96
|
+
velocity(range?: Kilometers, rangeRate?: KilometersPerSecond): Vector3D<KilometersPerSecond>;
|
|
97
|
+
/**
|
|
98
|
+
* Calculates the angular distance between two celestial coordinates (RA and Dec).
|
|
99
|
+
* @param radec - The celestial coordinates to compare with.
|
|
100
|
+
* @param method - The method to use for calculating the angular distance. Default is `AngularDistanceMethod.Cosine`.
|
|
101
|
+
* @returns The angular distance between the two celestial coordinates in radians.
|
|
102
|
+
*/
|
|
103
|
+
angle(radec: RadecGeocentric, method?: AngularDistanceMethod): Radians;
|
|
104
|
+
/**
|
|
105
|
+
* Calculates the angle in degrees between two RadecGeocentric objects.
|
|
106
|
+
* @param radec - The RadecGeocentric object to calculate the angle with.
|
|
107
|
+
* @param method - The method to use for calculating the angular distance. Default is AngularDistanceMethod.Cosine.
|
|
108
|
+
* @returns The angle in degrees.
|
|
109
|
+
*/
|
|
110
|
+
angleDegrees(radec: RadecGeocentric, method?: AngularDistanceMethod): Degrees;
|
|
111
|
+
}
|
|
@@ -0,0 +1,169 @@
|
|
|
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
|
+
import { AngularDistanceMethod } from '../enums/AngularDistanceMethod.js';
|
|
24
|
+
import { DEG2RAD, RAD2DEG, TAU } from '../utils/constants.js';
|
|
25
|
+
import { angularDistance } from '../utils/functions.js';
|
|
26
|
+
import { radecToPosition, radecToVelocity } from './ObservationUtils.js';
|
|
27
|
+
/**
|
|
28
|
+
* Represents a geocentric right ascension and declination observation.
|
|
29
|
+
*
|
|
30
|
+
* In geocentric coordinates, observations are considered from the Earth's center. This approach simplifies calculations
|
|
31
|
+
* for distant celestial objects, as it assumes a uniform observation point that ignores the observer's specific
|
|
32
|
+
* location on Earth.
|
|
33
|
+
*/
|
|
34
|
+
export class RadecGeocentric {
|
|
35
|
+
epoch;
|
|
36
|
+
rightAscension;
|
|
37
|
+
declination;
|
|
38
|
+
range;
|
|
39
|
+
rightAscensionRate;
|
|
40
|
+
declinationRate;
|
|
41
|
+
rangeRate;
|
|
42
|
+
constructor(epoch, rightAscension, declination, range, rightAscensionRate, declinationRate, rangeRate) {
|
|
43
|
+
this.epoch = epoch;
|
|
44
|
+
this.rightAscension = rightAscension;
|
|
45
|
+
this.declination = declination;
|
|
46
|
+
this.range = range;
|
|
47
|
+
this.rightAscensionRate = rightAscensionRate;
|
|
48
|
+
this.declinationRate = declinationRate;
|
|
49
|
+
this.rangeRate = rangeRate;
|
|
50
|
+
// Nothing to do here.
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Creates a RadecGeocentric object from the given parameters in degrees.
|
|
54
|
+
* @param epoch - The epoch in UTC.
|
|
55
|
+
* @param rightAscensionDegrees - The right ascension in degrees.
|
|
56
|
+
* @param declinationDegrees - The declination in degrees.
|
|
57
|
+
* @param range - The range in kilometers (optional).
|
|
58
|
+
* @param rightAscensionRateDegrees - The right ascension rate in degrees per second (optional).
|
|
59
|
+
* @param declinationRateDegrees - The declination rate in degrees per second (optional).
|
|
60
|
+
* @param rangeRate - The range rate in kilometers per second (optional).
|
|
61
|
+
* @returns A new RadecGeocentric object.
|
|
62
|
+
*/
|
|
63
|
+
static fromDegrees(epoch, rightAscensionDegrees, declinationDegrees, range, rightAscensionRateDegrees, declinationRateDegrees, rangeRate) {
|
|
64
|
+
const rightAscensionRate = rightAscensionRateDegrees
|
|
65
|
+
? rightAscensionRateDegrees * DEG2RAD
|
|
66
|
+
: null;
|
|
67
|
+
const declinationRate = declinationRateDegrees ? declinationRateDegrees * DEG2RAD : null;
|
|
68
|
+
return new RadecGeocentric(epoch, rightAscensionDegrees * DEG2RAD, declinationDegrees * DEG2RAD, range, rightAscensionRate, declinationRate, rangeRate);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Creates a RadecGeocentric object from a state vector in J2000 coordinates.
|
|
72
|
+
* @param state - The J2000 state vector.
|
|
73
|
+
* @returns A new RadecGeocentric object.
|
|
74
|
+
*/
|
|
75
|
+
static fromStateVector(state) {
|
|
76
|
+
const rI = state.position.x;
|
|
77
|
+
const rJ = state.position.y;
|
|
78
|
+
const rK = state.position.z;
|
|
79
|
+
const vI = state.velocity.x;
|
|
80
|
+
const vJ = state.velocity.y;
|
|
81
|
+
const vK = state.velocity.z;
|
|
82
|
+
const rMag = state.position.magnitude();
|
|
83
|
+
const declination = Math.asin(rK / rMag);
|
|
84
|
+
const rIJMag = Math.sqrt(rI * rI + rJ * rJ);
|
|
85
|
+
let rightAscension;
|
|
86
|
+
if (rIJMag !== 0) {
|
|
87
|
+
rightAscension = Math.atan2(rJ, rI);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
rightAscension = Math.atan2(vJ, vI);
|
|
91
|
+
}
|
|
92
|
+
const rangeRate = state.position.dot(state.velocity) / rMag;
|
|
93
|
+
const rightAscensionRate = (vI * rJ - vJ * rI) / (-(rJ * rJ) - rI * rI);
|
|
94
|
+
const declinationRate = (vK - rangeRate * (rK / rMag)) / rIJMag;
|
|
95
|
+
return new RadecGeocentric(state.epoch, rightAscension % TAU, declination, rMag, rightAscensionRate, declinationRate, rangeRate);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Gets the right ascension in degrees.
|
|
99
|
+
* @returns The right ascension in degrees.
|
|
100
|
+
*/
|
|
101
|
+
get rightAscensionDegrees() {
|
|
102
|
+
return this.rightAscension * RAD2DEG;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Gets the declination in degrees.
|
|
106
|
+
* @returns The declination in degrees.
|
|
107
|
+
*/
|
|
108
|
+
get declinationDegrees() {
|
|
109
|
+
return this.declination * RAD2DEG;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Gets the right ascension rate in degrees per second.
|
|
113
|
+
* @returns The right ascension rate in degrees per second, or null if it is not available.
|
|
114
|
+
*/
|
|
115
|
+
get rightAscensionRateDegrees() {
|
|
116
|
+
return this.rightAscensionRate ? this.rightAscensionRate * RAD2DEG : null;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Gets the rate of change of declination in degrees per second.
|
|
120
|
+
* @returns The rate of change of declination in degrees per second, or null if not available.
|
|
121
|
+
*/
|
|
122
|
+
get declinationRateDegrees() {
|
|
123
|
+
return this.declinationRate ? this.declinationRate * RAD2DEG : null;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Calculates the position vector in geocentric coordinates.
|
|
127
|
+
* @param range - The range in kilometers (optional). If not provided, it uses the default range or 1.0 kilometer.
|
|
128
|
+
* @returns The position vector in geocentric coordinates.
|
|
129
|
+
*/
|
|
130
|
+
position(range) {
|
|
131
|
+
const r = range ?? this.range ?? 1.0;
|
|
132
|
+
return radecToPosition(this.rightAscension, this.declination, r);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Calculates the velocity vector of the celestial object.
|
|
136
|
+
* @param range - The range of the celestial object in kilometers. If not provided, it uses the stored range value.
|
|
137
|
+
* @param rangeRate - The range rate of the celestial object in kilometers per second.
|
|
138
|
+
* If not provided, it uses the stored range rate value.
|
|
139
|
+
* @returns The velocity vector of the celestial object in kilometers per second.
|
|
140
|
+
* @throws Error if the right ascension rate or declination rate is missing.
|
|
141
|
+
*/
|
|
142
|
+
velocity(range, rangeRate) {
|
|
143
|
+
if (!this.rightAscensionRate || !this.declinationRate) {
|
|
144
|
+
throw new Error('Velocity unsolvable, missing ra/dec rates.');
|
|
145
|
+
}
|
|
146
|
+
const r = range ?? this.range ?? 1.0;
|
|
147
|
+
const rd = rangeRate ?? this.rangeRate ?? 0.0;
|
|
148
|
+
return radecToVelocity(this.rightAscension, this.declination, r, this.rightAscensionRate, this.declinationRate, rd);
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Calculates the angular distance between two celestial coordinates (RA and Dec).
|
|
152
|
+
* @param radec - The celestial coordinates to compare with.
|
|
153
|
+
* @param method - The method to use for calculating the angular distance. Default is `AngularDistanceMethod.Cosine`.
|
|
154
|
+
* @returns The angular distance between the two celestial coordinates in radians.
|
|
155
|
+
*/
|
|
156
|
+
angle(radec, method = AngularDistanceMethod.Cosine) {
|
|
157
|
+
return angularDistance(this.rightAscension, this.declination, radec.rightAscension, radec.declination, method);
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Calculates the angle in degrees between two RadecGeocentric objects.
|
|
161
|
+
* @param radec - The RadecGeocentric object to calculate the angle with.
|
|
162
|
+
* @param method - The method to use for calculating the angular distance. Default is AngularDistanceMethod.Cosine.
|
|
163
|
+
* @returns The angle in degrees.
|
|
164
|
+
*/
|
|
165
|
+
angleDegrees(radec, method = AngularDistanceMethod.Cosine) {
|
|
166
|
+
return this.angle(radec, method) * RAD2DEG;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=RadecGeocentric.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RadecGeocentric.js","sourceRoot":"","sources":["../../src/observation/RadecGeocentric.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,123 @@
|
|
|
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
|
+
import { Degrees, DegreesPerSecond, Kilometers, KilometersPerSecond, Radians, RadiansPerSecond } from '../main.js';
|
|
24
|
+
import { J2000 } from '../coordinate/J2000.js';
|
|
25
|
+
import { AngularDistanceMethod } from '../enums/AngularDistanceMethod.js';
|
|
26
|
+
import { Vector3D } from '../operations/Vector3D.js';
|
|
27
|
+
import { EpochUTC } from '../time/EpochUTC.js';
|
|
28
|
+
/**
|
|
29
|
+
* Represents a topocentric right ascension and declination observation.
|
|
30
|
+
*
|
|
31
|
+
* Topocentric coordinates take into account the observer's exact location on the Earth's surface. This model is crucial
|
|
32
|
+
* for precise measurements of local astronomical events and nearby celestial objects, where the observer's latitude,
|
|
33
|
+
* longitude, and altitude can significantly affect the observed position due to parallax. Topocentric coordinates are
|
|
34
|
+
* particularly important for observations of the Moon, planets, and artificial satellites.
|
|
35
|
+
*/
|
|
36
|
+
export declare class RadecTopocentric {
|
|
37
|
+
epoch: EpochUTC;
|
|
38
|
+
rightAscension: Radians;
|
|
39
|
+
declination: Radians;
|
|
40
|
+
range?: Kilometers | undefined;
|
|
41
|
+
rightAscensionRate?: (RadiansPerSecond | null) | undefined;
|
|
42
|
+
declinationRate?: (RadiansPerSecond | null) | undefined;
|
|
43
|
+
rangeRate?: (KilometersPerSecond | null) | undefined;
|
|
44
|
+
constructor(epoch: EpochUTC, rightAscension: Radians, declination: Radians, range?: Kilometers | undefined, rightAscensionRate?: (RadiansPerSecond | null) | undefined, declinationRate?: (RadiansPerSecond | null) | undefined, rangeRate?: (KilometersPerSecond | null) | undefined);
|
|
45
|
+
/**
|
|
46
|
+
* Create a new RadecTopocentric object, using degrees for the angular values.
|
|
47
|
+
* @param epoch UTC epoch.
|
|
48
|
+
* @param rightAscensionDegrees Right-ascension in degrees.
|
|
49
|
+
* @param declinationDegrees Declination in degrees.
|
|
50
|
+
* @param range Range in km.
|
|
51
|
+
* @param rightAscensionRateDegrees Right-ascension rate in degrees per second.
|
|
52
|
+
* @param declinationRateDegrees Declination rate in degrees per second.
|
|
53
|
+
* @param rangeRate Range rate in km/s.
|
|
54
|
+
* @returns A new RadecTopocentric object.
|
|
55
|
+
*/
|
|
56
|
+
static fromDegrees(epoch: EpochUTC, rightAscensionDegrees: Degrees, declinationDegrees: Degrees, range?: Kilometers, rightAscensionRateDegrees?: DegreesPerSecond, declinationRateDegrees?: DegreesPerSecond, rangeRate?: KilometersPerSecond): RadecTopocentric;
|
|
57
|
+
/**
|
|
58
|
+
* Create a new RadecTopocentric object from a J2000 state vector.
|
|
59
|
+
* @param state Inertial state vector.
|
|
60
|
+
* @param site Site vector.
|
|
61
|
+
* @returns A new RadecTopocentric object.
|
|
62
|
+
*/
|
|
63
|
+
static fromStateVector(state: J2000, site: J2000): RadecTopocentric;
|
|
64
|
+
/**
|
|
65
|
+
* Gets the right ascension in degrees.
|
|
66
|
+
* @returns The right ascension in degrees.
|
|
67
|
+
*/
|
|
68
|
+
get rightAscensionDegrees(): Degrees;
|
|
69
|
+
/**
|
|
70
|
+
* Gets the declination in degrees.
|
|
71
|
+
* @returns The declination in degrees.
|
|
72
|
+
*/
|
|
73
|
+
get declinationDegrees(): Degrees;
|
|
74
|
+
/**
|
|
75
|
+
* Gets the right ascension rate in degrees per second.
|
|
76
|
+
* @returns The right ascension rate in degrees per second, or null if it is not available.
|
|
77
|
+
*/
|
|
78
|
+
get rightAscensionRateDegrees(): DegreesPerSecond | null;
|
|
79
|
+
/**
|
|
80
|
+
* Gets the rate of change of declination in degrees per second.
|
|
81
|
+
* @returns The rate of change of declination in degrees per second, or null if the declination rate is not defined.
|
|
82
|
+
*/
|
|
83
|
+
get declinationRateDegrees(): DegreesPerSecond | null;
|
|
84
|
+
/**
|
|
85
|
+
* Return the position relative to the observer site.
|
|
86
|
+
*
|
|
87
|
+
* An optional range value can be passed to override the value contained in this observation.
|
|
88
|
+
* @param site Observer site.
|
|
89
|
+
* @param range Range in km.
|
|
90
|
+
* @returns A Vector3D object.
|
|
91
|
+
*/
|
|
92
|
+
position(site: J2000, range?: Kilometers): Vector3D<Kilometers>;
|
|
93
|
+
/**
|
|
94
|
+
* Return the velocity relative to the observer site.
|
|
95
|
+
*
|
|
96
|
+
* An optional range and rangeRate value can be passed to override the values contained in this observation.
|
|
97
|
+
* @param site Observer site.
|
|
98
|
+
* @param range Range in km.
|
|
99
|
+
* @param rangeRate Range rate in km/s.
|
|
100
|
+
* @returns A Vector3D object.
|
|
101
|
+
*/
|
|
102
|
+
velocity(site: J2000, range?: Kilometers, rangeRate?: KilometersPerSecond): Vector3D<KilometersPerSecond>;
|
|
103
|
+
/**
|
|
104
|
+
* Calculates the line of sight vector in the topocentric coordinate system.
|
|
105
|
+
* The line of sight vector points from the observer's location towards the celestial object.
|
|
106
|
+
* @returns The line of sight vector as a Vector3D object.
|
|
107
|
+
*/
|
|
108
|
+
lineOfSight(): Vector3D;
|
|
109
|
+
/**
|
|
110
|
+
* Calculate the angular distance between this and another RadecTopocentric object.
|
|
111
|
+
* @param radec - The other RadecTopocentric object.
|
|
112
|
+
* @param method - The angular distance method to use.
|
|
113
|
+
* @returns The angular distance.
|
|
114
|
+
*/
|
|
115
|
+
angle(radec: RadecTopocentric, method?: AngularDistanceMethod): Radians;
|
|
116
|
+
/**
|
|
117
|
+
* Calculate the angular distance between this and another RadecTopocentric object.
|
|
118
|
+
* @param radec - The other RadecTopocentric object.
|
|
119
|
+
* @param method - The angular distance method to use.
|
|
120
|
+
* @returns The angular distance
|
|
121
|
+
*/
|
|
122
|
+
angleDegrees(radec: RadecTopocentric, method?: AngularDistanceMethod): Degrees;
|
|
123
|
+
}
|
|
@@ -0,0 +1,196 @@
|
|
|
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
|
+
import { AngularDistanceMethod } from '../enums/AngularDistanceMethod.js';
|
|
24
|
+
import { Vector3D } from '../operations/Vector3D.js';
|
|
25
|
+
import { DEG2RAD, RAD2DEG, TAU } from '../utils/constants.js';
|
|
26
|
+
import { angularDistance } from '../utils/functions.js';
|
|
27
|
+
import { radecToPosition, radecToVelocity } from './ObservationUtils.js';
|
|
28
|
+
/**
|
|
29
|
+
* Represents a topocentric right ascension and declination observation.
|
|
30
|
+
*
|
|
31
|
+
* Topocentric coordinates take into account the observer's exact location on the Earth's surface. This model is crucial
|
|
32
|
+
* for precise measurements of local astronomical events and nearby celestial objects, where the observer's latitude,
|
|
33
|
+
* longitude, and altitude can significantly affect the observed position due to parallax. Topocentric coordinates are
|
|
34
|
+
* particularly important for observations of the Moon, planets, and artificial satellites.
|
|
35
|
+
*/
|
|
36
|
+
export class RadecTopocentric {
|
|
37
|
+
epoch;
|
|
38
|
+
rightAscension;
|
|
39
|
+
declination;
|
|
40
|
+
range;
|
|
41
|
+
rightAscensionRate;
|
|
42
|
+
declinationRate;
|
|
43
|
+
rangeRate;
|
|
44
|
+
constructor(epoch, rightAscension, declination, range, rightAscensionRate, declinationRate, rangeRate) {
|
|
45
|
+
this.epoch = epoch;
|
|
46
|
+
this.rightAscension = rightAscension;
|
|
47
|
+
this.declination = declination;
|
|
48
|
+
this.range = range;
|
|
49
|
+
this.rightAscensionRate = rightAscensionRate;
|
|
50
|
+
this.declinationRate = declinationRate;
|
|
51
|
+
this.rangeRate = rangeRate;
|
|
52
|
+
// Nothing to do here.
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Create a new RadecTopocentric object, using degrees for the angular values.
|
|
56
|
+
* @param epoch UTC epoch.
|
|
57
|
+
* @param rightAscensionDegrees Right-ascension in degrees.
|
|
58
|
+
* @param declinationDegrees Declination in degrees.
|
|
59
|
+
* @param range Range in km.
|
|
60
|
+
* @param rightAscensionRateDegrees Right-ascension rate in degrees per second.
|
|
61
|
+
* @param declinationRateDegrees Declination rate in degrees per second.
|
|
62
|
+
* @param rangeRate Range rate in km/s.
|
|
63
|
+
* @returns A new RadecTopocentric object.
|
|
64
|
+
*/
|
|
65
|
+
static fromDegrees(epoch, rightAscensionDegrees, declinationDegrees, range, rightAscensionRateDegrees, declinationRateDegrees, rangeRate) {
|
|
66
|
+
const rightAscensionRate = rightAscensionRateDegrees
|
|
67
|
+
? rightAscensionRateDegrees * DEG2RAD
|
|
68
|
+
: null;
|
|
69
|
+
const declinationRate = declinationRateDegrees
|
|
70
|
+
? declinationRateDegrees * DEG2RAD
|
|
71
|
+
: null;
|
|
72
|
+
return new RadecTopocentric(epoch, rightAscensionDegrees * DEG2RAD, declinationDegrees * DEG2RAD, range, rightAscensionRate, declinationRate, rangeRate);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Create a new RadecTopocentric object from a J2000 state vector.
|
|
76
|
+
* @param state Inertial state vector.
|
|
77
|
+
* @param site Site vector.
|
|
78
|
+
* @returns A new RadecTopocentric object.
|
|
79
|
+
*/
|
|
80
|
+
static fromStateVector(state, site) {
|
|
81
|
+
const p = state.position.subtract(site.position);
|
|
82
|
+
const pI = p.x;
|
|
83
|
+
const pJ = p.y;
|
|
84
|
+
const pK = p.z;
|
|
85
|
+
const pMag = p.magnitude();
|
|
86
|
+
const declination = Math.asin(pK / pMag);
|
|
87
|
+
const pDot = state.velocity.subtract(site.velocity);
|
|
88
|
+
const pIDot = pDot.x;
|
|
89
|
+
const pJDot = pDot.y;
|
|
90
|
+
const pKDot = pDot.z;
|
|
91
|
+
const pIJMag = Math.sqrt(pI * pI + pJ * pJ);
|
|
92
|
+
let rightAscension;
|
|
93
|
+
if (pIJMag !== 0) {
|
|
94
|
+
rightAscension = Math.atan2(pJ, pI);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
rightAscension = Math.atan2(pJDot, pIDot);
|
|
98
|
+
}
|
|
99
|
+
const rangeRate = p.dot(pDot) / pMag;
|
|
100
|
+
const rightAscensionRate = (pIDot * pJ - pJDot * pI) / (-(pJ * pJ) - pI * pI);
|
|
101
|
+
const declinationRate = (pKDot - rangeRate * Math.sin(declination)) / pIJMag;
|
|
102
|
+
return new RadecTopocentric(state.epoch, rightAscension % TAU, declination, pMag, rightAscensionRate, declinationRate, rangeRate);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Gets the right ascension in degrees.
|
|
106
|
+
* @returns The right ascension in degrees.
|
|
107
|
+
*/
|
|
108
|
+
get rightAscensionDegrees() {
|
|
109
|
+
return this.rightAscension * RAD2DEG;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Gets the declination in degrees.
|
|
113
|
+
* @returns The declination in degrees.
|
|
114
|
+
*/
|
|
115
|
+
get declinationDegrees() {
|
|
116
|
+
return this.declination * RAD2DEG;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Gets the right ascension rate in degrees per second.
|
|
120
|
+
* @returns The right ascension rate in degrees per second, or null if it is not available.
|
|
121
|
+
*/
|
|
122
|
+
get rightAscensionRateDegrees() {
|
|
123
|
+
return this.rightAscensionRate
|
|
124
|
+
? this.rightAscensionRate * RAD2DEG
|
|
125
|
+
: null;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Gets the rate of change of declination in degrees per second.
|
|
129
|
+
* @returns The rate of change of declination in degrees per second, or null if the declination rate is not defined.
|
|
130
|
+
*/
|
|
131
|
+
get declinationRateDegrees() {
|
|
132
|
+
return this.declinationRate
|
|
133
|
+
? this.declinationRate * RAD2DEG
|
|
134
|
+
: null;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Return the position relative to the observer site.
|
|
138
|
+
*
|
|
139
|
+
* An optional range value can be passed to override the value contained in this observation.
|
|
140
|
+
* @param site Observer site.
|
|
141
|
+
* @param range Range in km.
|
|
142
|
+
* @returns A Vector3D object.
|
|
143
|
+
*/
|
|
144
|
+
position(site, range) {
|
|
145
|
+
const r = range ?? this.range ?? 1.0;
|
|
146
|
+
return radecToPosition(this.rightAscension, this.declination, r).add(site.position);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Return the velocity relative to the observer site.
|
|
150
|
+
*
|
|
151
|
+
* An optional range and rangeRate value can be passed to override the values contained in this observation.
|
|
152
|
+
* @param site Observer site.
|
|
153
|
+
* @param range Range in km.
|
|
154
|
+
* @param rangeRate Range rate in km/s.
|
|
155
|
+
* @returns A Vector3D object.
|
|
156
|
+
*/
|
|
157
|
+
velocity(site, range, rangeRate) {
|
|
158
|
+
if (!this.rightAscensionRate || !this.declinationRate) {
|
|
159
|
+
throw new Error('Velocity unsolvable, missing ra/dec rates.');
|
|
160
|
+
}
|
|
161
|
+
const r = range ?? this.range ?? 1.0;
|
|
162
|
+
const rd = rangeRate ?? this.rangeRate ?? 0.0;
|
|
163
|
+
return radecToVelocity(this.rightAscension, this.declination, r, this.rightAscensionRate, this.declinationRate, rd).add(site.velocity);
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Calculates the line of sight vector in the topocentric coordinate system.
|
|
167
|
+
* The line of sight vector points from the observer's location towards the celestial object.
|
|
168
|
+
* @returns The line of sight vector as a Vector3D object.
|
|
169
|
+
*/
|
|
170
|
+
lineOfSight() {
|
|
171
|
+
const ca = Math.cos(this.rightAscension);
|
|
172
|
+
const cd = Math.cos(this.declination);
|
|
173
|
+
const sa = Math.sin(this.rightAscension);
|
|
174
|
+
const sd = Math.sin(this.declination);
|
|
175
|
+
return new Vector3D(cd * ca, cd * sa, sd);
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Calculate the angular distance between this and another RadecTopocentric object.
|
|
179
|
+
* @param radec - The other RadecTopocentric object.
|
|
180
|
+
* @param method - The angular distance method to use.
|
|
181
|
+
* @returns The angular distance.
|
|
182
|
+
*/
|
|
183
|
+
angle(radec, method = AngularDistanceMethod.Cosine) {
|
|
184
|
+
return angularDistance(this.rightAscension, this.declination, radec.rightAscension, radec.declination, method);
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Calculate the angular distance between this and another RadecTopocentric object.
|
|
188
|
+
* @param radec - The other RadecTopocentric object.
|
|
189
|
+
* @param method - The angular distance method to use.
|
|
190
|
+
* @returns The angular distance
|
|
191
|
+
*/
|
|
192
|
+
angleDegrees(radec, method = AngularDistanceMethod.Cosine) {
|
|
193
|
+
return this.angle(radec, method) * RAD2DEG;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=RadecTopocentric.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RadecTopocentric.js","sourceRoot":"","sources":["../../src/observation/RadecTopocentric.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
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
|
+
export * from './ObservationUtils.js';
|
|
24
|
+
export { RadecGeocentric } from './RadecGeocentric.js';
|
|
25
|
+
export { RadecTopocentric } from './RadecTopocentric.js';
|
|
26
|
+
export { RAE } from './RAE.js';
|