ootk 4.0.9 → 5.0.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.
Files changed (535) hide show
  1. package/README.md +0 -15
  2. package/dist/body/Celestial.d.ts +96 -0
  3. package/dist/body/Celestial.js +124 -0
  4. package/dist/body/Celestial.js.map +1 -0
  5. package/dist/body/Earth.d.ts +68 -0
  6. package/dist/body/Earth.js +198 -0
  7. package/dist/body/Earth.js.map +1 -0
  8. package/dist/body/Moon.d.ts +137 -0
  9. package/dist/body/Moon.js +464 -0
  10. package/dist/body/Moon.js.map +1 -0
  11. package/dist/body/NutationAngles.d.ts +38 -0
  12. package/dist/body/NutationAngles.js +24 -0
  13. package/dist/body/NutationAngles.js.map +1 -0
  14. package/dist/body/PrecessionAngles.d.ts +29 -0
  15. package/dist/body/PrecessionAngles.js +24 -0
  16. package/dist/body/PrecessionAngles.js.map +1 -0
  17. package/dist/body/Sun.d.ts +305 -0
  18. package/dist/body/Sun.js +548 -0
  19. package/dist/body/Sun.js.map +1 -0
  20. package/dist/body/index.d.ts +26 -0
  21. package/dist/body/index.js +27 -0
  22. package/dist/body/index.js.map +1 -0
  23. package/dist/coordinate/ClassicalElements.d.ts +132 -0
  24. package/dist/coordinate/ClassicalElements.js +279 -0
  25. package/dist/coordinate/ClassicalElements.js.map +1 -0
  26. package/dist/coordinate/EquinoctialElements.d.ts +114 -0
  27. package/dist/coordinate/EquinoctialElements.js +172 -0
  28. package/dist/coordinate/EquinoctialElements.js.map +1 -0
  29. package/dist/coordinate/FormatTle.d.ts +95 -0
  30. package/dist/coordinate/FormatTle.js +184 -0
  31. package/dist/coordinate/FormatTle.js.map +1 -0
  32. package/dist/coordinate/Geodetic.d.ts +110 -0
  33. package/dist/coordinate/Geodetic.js +163 -0
  34. package/dist/coordinate/Geodetic.js.map +1 -0
  35. package/dist/coordinate/Hill.d.ts +1 -1
  36. package/dist/coordinate/Hill.js +1 -1
  37. package/dist/coordinate/Hill.js.map +1 -1
  38. package/dist/coordinate/ITRF.d.ts +75 -0
  39. package/dist/coordinate/ITRF.js +135 -0
  40. package/dist/coordinate/ITRF.js.map +1 -0
  41. package/dist/coordinate/J2000.d.ts +65 -0
  42. package/dist/coordinate/J2000.js +120 -0
  43. package/dist/coordinate/J2000.js.map +1 -0
  44. package/dist/coordinate/RIC.d.ts +64 -0
  45. package/dist/coordinate/RIC.js +79 -0
  46. package/dist/coordinate/RIC.js.map +1 -0
  47. package/dist/coordinate/RelativeState.d.ts +70 -0
  48. package/dist/coordinate/RelativeState.js +79 -0
  49. package/dist/coordinate/RelativeState.js.map +1 -0
  50. package/dist/coordinate/StateVector.d.ts +76 -0
  51. package/dist/coordinate/StateVector.js +97 -0
  52. package/dist/coordinate/StateVector.js.map +1 -0
  53. package/dist/coordinate/TEME.d.ts +57 -0
  54. package/dist/coordinate/TEME.js +89 -0
  55. package/dist/coordinate/TEME.js.map +1 -0
  56. package/dist/coordinate/Tle.d.ts +430 -0
  57. package/dist/coordinate/Tle.js +865 -0
  58. package/dist/coordinate/Tle.js.map +1 -0
  59. package/dist/coordinate/index.d.ts +11 -0
  60. package/dist/coordinate/index.js +12 -0
  61. package/dist/coordinate/index.js.map +1 -1
  62. package/dist/coordinate/tle-format-data.d.ts +41 -0
  63. package/dist/coordinate/tle-format-data.js +46 -0
  64. package/dist/coordinate/tle-format-data.js.map +1 -0
  65. package/dist/covariance/CovarianceSample.d.ts +1 -1
  66. package/dist/covariance/CovarianceSample.js +1 -1
  67. package/dist/covariance/CovarianceSample.js.map +1 -1
  68. package/dist/covariance/StateCovariance.d.ts +1 -1
  69. package/dist/covariance/StateCovariance.js +1 -1
  70. package/dist/covariance/StateCovariance.js.map +1 -1
  71. package/dist/data/DataHandler.d.ts +66 -0
  72. package/dist/data/DataHandler.js +80 -0
  73. package/dist/data/DataHandler.js.map +1 -0
  74. package/dist/data/values/Egm96Data.d.ts +37 -0
  75. package/dist/data/values/Egm96Data.js +63 -0
  76. package/dist/data/values/Egm96Data.js.map +1 -0
  77. package/dist/data/values/HpAtmosphereData.d.ts +33 -0
  78. package/dist/data/values/HpAtmosphereData.js +58 -0
  79. package/dist/data/values/HpAtmosphereData.js.map +1 -0
  80. package/dist/data/values/HpAtmosphereResult.d.ts +29 -0
  81. package/dist/data/values/HpAtmosphereResult.js +38 -0
  82. package/dist/data/values/HpAtmosphereResult.js.map +1 -0
  83. package/dist/data/values/Iau1980Data.d.ts +36 -0
  84. package/dist/data/values/Iau1980Data.js +52 -0
  85. package/dist/data/values/Iau1980Data.js.map +1 -0
  86. package/dist/data/values/LeapSecond.d.ts +27 -0
  87. package/dist/data/values/LeapSecond.js +35 -0
  88. package/dist/data/values/LeapSecond.js.map +1 -0
  89. package/dist/data/values/LeapSecondData.d.ts +41 -0
  90. package/dist/data/values/LeapSecondData.js +103 -0
  91. package/dist/data/values/LeapSecondData.js.map +1 -0
  92. package/dist/data/values/egm96.d.ts +24 -0
  93. package/dist/data/values/egm96.js +726 -0
  94. package/dist/data/values/egm96.js.map +1 -0
  95. package/dist/data/values/hpAtmosphere.d.ts +24 -0
  96. package/dist/data/values/hpAtmosphere.js +76 -0
  97. package/dist/data/values/hpAtmosphere.js.map +1 -0
  98. package/dist/data/values/iau1980.d.ts +24 -0
  99. package/dist/data/values/iau1980.js +30 -0
  100. package/dist/data/values/iau1980.js.map +1 -0
  101. package/dist/enums/AngularDiameterMethod.d.ts +27 -0
  102. package/dist/enums/AngularDiameterMethod.js +29 -0
  103. package/dist/enums/AngularDiameterMethod.js.map +1 -0
  104. package/dist/enums/AngularDistanceMethod.d.ts +27 -0
  105. package/dist/enums/AngularDistanceMethod.js +29 -0
  106. package/dist/enums/AngularDistanceMethod.js.map +1 -0
  107. package/dist/enums/OrbitRegime.d.ts +30 -0
  108. package/dist/enums/OrbitRegime.js +32 -0
  109. package/dist/enums/OrbitRegime.js.map +1 -0
  110. package/dist/enums/PassType.d.ts +28 -0
  111. package/dist/enums/PassType.js +30 -0
  112. package/dist/enums/PassType.js.map +1 -0
  113. package/dist/enums/Sgp4OpsMode.d.ts +26 -0
  114. package/dist/enums/Sgp4OpsMode.js +28 -0
  115. package/dist/enums/Sgp4OpsMode.js.map +1 -0
  116. package/dist/enums/index.d.ts +5 -0
  117. package/dist/enums/index.js +5 -0
  118. package/dist/enums/index.js.map +1 -1
  119. package/dist/force/AtmosphericDrag.d.ts +1 -1
  120. package/dist/force/AtmosphericDrag.js +1 -1
  121. package/dist/force/AtmosphericDrag.js.map +1 -1
  122. package/dist/force/EarthGravity.d.ts +1 -1
  123. package/dist/force/EarthGravity.js +1 -1
  124. package/dist/force/EarthGravity.js.map +1 -1
  125. package/dist/force/Force.d.ts +1 -1
  126. package/dist/force/ForceModel.d.ts +1 -1
  127. package/dist/force/ForceModel.js +1 -1
  128. package/dist/force/ForceModel.js.map +1 -1
  129. package/dist/force/Gravity.d.ts +1 -1
  130. package/dist/force/Gravity.js +1 -1
  131. package/dist/force/Gravity.js.map +1 -1
  132. package/dist/force/SolarRadiationPressure.d.ts +1 -1
  133. package/dist/force/SolarRadiationPressure.js +1 -1
  134. package/dist/force/SolarRadiationPressure.js.map +1 -1
  135. package/dist/force/ThirdBodyGravity.d.ts +1 -1
  136. package/dist/force/ThirdBodyGravity.js +1 -1
  137. package/dist/force/ThirdBodyGravity.js.map +1 -1
  138. package/dist/force/Thrust.d.ts +1 -1
  139. package/dist/force/Thrust.js +1 -1
  140. package/dist/force/Thrust.js.map +1 -1
  141. package/dist/interfaces/BaseObjectParams.d.ts +31 -0
  142. package/dist/interfaces/BaseObjectParams.js +24 -0
  143. package/dist/interfaces/BaseObjectParams.js.map +1 -0
  144. package/dist/interfaces/ClassicalElementsParams.d.ts +33 -0
  145. package/dist/interfaces/ClassicalElementsParams.js +24 -0
  146. package/dist/interfaces/ClassicalElementsParams.js.map +1 -0
  147. package/dist/interfaces/EquinoctialElementsParams.d.ts +35 -0
  148. package/dist/interfaces/EquinoctialElementsParams.js +24 -0
  149. package/dist/interfaces/EquinoctialElementsParams.js.map +1 -0
  150. package/dist/interfaces/GroundPositionParams.d.ts +28 -0
  151. package/dist/interfaces/GroundPositionParams.js +24 -0
  152. package/dist/interfaces/GroundPositionParams.js.map +1 -0
  153. package/dist/interfaces/OmmFormat.d.ts +62 -0
  154. package/dist/interfaces/OmmFormat.js +2 -0
  155. package/dist/interfaces/OmmFormat.js.map +1 -0
  156. package/dist/interfaces/OptionsParams.d.ts +3 -0
  157. package/dist/interfaces/OptionsParams.js +2 -0
  158. package/dist/interfaces/OptionsParams.js.map +1 -0
  159. package/dist/interfaces/RfSensorParams.d.ts +1 -1
  160. package/dist/interfaces/SatelliteParams.d.ts +18 -0
  161. package/dist/interfaces/SatelliteParams.js +2 -0
  162. package/dist/interfaces/SatelliteParams.js.map +1 -0
  163. package/dist/interfaces/SensorParams.d.ts +38 -0
  164. package/dist/interfaces/SensorParams.js +2 -0
  165. package/dist/interfaces/SensorParams.js.map +1 -0
  166. package/dist/interfaces/StarObjectParams.d.ts +10 -0
  167. package/dist/interfaces/StarObjectParams.js +2 -0
  168. package/dist/interfaces/StarObjectParams.js.map +1 -0
  169. package/dist/interfaces/TimeVariables.d.ts +6 -0
  170. package/dist/interfaces/TimeVariables.js +2 -0
  171. package/dist/interfaces/TimeVariables.js.map +1 -0
  172. package/dist/interfaces/index.d.ts +8 -0
  173. package/dist/interpolator/ChebyshevCoefficients.d.ts +1 -1
  174. package/dist/interpolator/ChebyshevCoefficients.js +1 -1
  175. package/dist/interpolator/ChebyshevCoefficients.js.map +1 -1
  176. package/dist/interpolator/ChebyshevInterpolator.d.ts +1 -1
  177. package/dist/interpolator/ChebyshevInterpolator.js +1 -1
  178. package/dist/interpolator/ChebyshevInterpolator.js.map +1 -1
  179. package/dist/interpolator/CubicSpline.d.ts +1 -1
  180. package/dist/interpolator/CubicSplineInterpolator.d.ts +1 -1
  181. package/dist/interpolator/CubicSplineInterpolator.js +1 -1
  182. package/dist/interpolator/CubicSplineInterpolator.js.map +1 -1
  183. package/dist/interpolator/Interpolator.d.ts +1 -1
  184. package/dist/interpolator/Interpolator.js +1 -1
  185. package/dist/interpolator/Interpolator.js.map +1 -1
  186. package/dist/interpolator/LagrangeInterpolator.d.ts +1 -1
  187. package/dist/interpolator/LagrangeInterpolator.js +1 -1
  188. package/dist/interpolator/LagrangeInterpolator.js.map +1 -1
  189. package/dist/interpolator/StateInterpolator.d.ts +1 -1
  190. package/dist/interpolator/VerletBlendInterpolator.d.ts +1 -1
  191. package/dist/interpolator/VerletBlendInterpolator.js +1 -1
  192. package/dist/interpolator/VerletBlendInterpolator.js.map +1 -1
  193. package/dist/main.d.ts +11 -3
  194. package/dist/main.js +11 -3
  195. package/dist/main.js.map +1 -1
  196. package/dist/maneuver/TwoBurnOrbitTransfer.d.ts +1 -1
  197. package/dist/maneuver/TwoBurnOrbitTransfer.js +1 -1
  198. package/dist/maneuver/TwoBurnOrbitTransfer.js.map +1 -1
  199. package/dist/maneuver/Waypoint.d.ts +1 -1
  200. package/dist/maneuver/Waypoint.js +1 -1
  201. package/dist/maneuver/Waypoint.js.map +1 -1
  202. package/dist/objects/BaseObject.d.ts +74 -0
  203. package/dist/objects/BaseObject.js +151 -0
  204. package/dist/objects/BaseObject.js.map +1 -0
  205. package/dist/objects/DetailedSatellite.d.ts +2 -1
  206. package/dist/objects/DetailedSatellite.js +2 -2
  207. package/dist/objects/DetailedSatellite.js.map +1 -1
  208. package/dist/objects/DetailedSensor.d.ts +2 -1
  209. package/dist/objects/DetailedSensor.js +1 -1
  210. package/dist/objects/DetailedSensor.js.map +1 -1
  211. package/dist/objects/GroundObject.d.ts +85 -0
  212. package/dist/objects/GroundObject.js +143 -0
  213. package/dist/objects/GroundObject.js.map +1 -0
  214. package/dist/objects/LandObject.d.ts +2 -1
  215. package/dist/objects/LandObject.js +1 -1
  216. package/dist/objects/LandObject.js.map +1 -1
  217. package/dist/objects/Marker.d.ts +1 -1
  218. package/dist/objects/Marker.js +1 -1
  219. package/dist/objects/Marker.js.map +1 -1
  220. package/dist/objects/RfSensor.d.ts +1 -2
  221. package/dist/objects/RfSensor.js +1 -2
  222. package/dist/objects/RfSensor.js.map +1 -1
  223. package/dist/objects/Satellite.d.ts +226 -0
  224. package/dist/objects/Satellite.js +443 -0
  225. package/dist/objects/Satellite.js.map +1 -0
  226. package/dist/objects/Sensor.d.ts +100 -0
  227. package/dist/objects/Sensor.js +239 -0
  228. package/dist/objects/Sensor.js.map +1 -0
  229. package/dist/objects/Star.d.ts +36 -0
  230. package/dist/objects/Star.js +59 -0
  231. package/dist/objects/Star.js.map +1 -0
  232. package/dist/objects/index.d.ts +5 -0
  233. package/dist/objects/index.js +5 -0
  234. package/dist/objects/index.js.map +1 -1
  235. package/dist/observation/Observation.d.ts +1 -1
  236. package/dist/observation/ObservationOptical.d.ts +1 -1
  237. package/dist/observation/ObservationOptical.js +1 -1
  238. package/dist/observation/ObservationOptical.js.map +1 -1
  239. package/dist/observation/ObservationRadar.d.ts +1 -1
  240. package/dist/observation/ObservationRadar.js +1 -1
  241. package/dist/observation/ObservationRadar.js.map +1 -1
  242. package/dist/observation/ObservationUtils.d.ts +3 -1
  243. package/dist/observation/ObservationUtils.js +15 -1
  244. package/dist/observation/ObservationUtils.js.map +1 -1
  245. package/dist/observation/RAE.d.ts +111 -0
  246. package/dist/observation/RAE.js +215 -0
  247. package/dist/observation/RAE.js.map +1 -0
  248. package/dist/observation/RadecGeocentric.d.ts +111 -0
  249. package/dist/observation/RadecGeocentric.js +169 -0
  250. package/dist/observation/RadecGeocentric.js.map +1 -0
  251. package/dist/observation/RadecTopocentric.d.ts +123 -0
  252. package/dist/observation/RadecTopocentric.js +196 -0
  253. package/dist/observation/RadecTopocentric.js.map +1 -0
  254. package/dist/observation/index.d.ts +26 -0
  255. package/dist/observation/index.js +27 -0
  256. package/dist/observation/index.js.map +1 -0
  257. package/dist/operations/BoxMuller.d.ts +1 -1
  258. package/dist/operations/BoxMuller.js +1 -1
  259. package/dist/operations/BoxMuller.js.map +1 -1
  260. package/dist/operations/EulerAngles.d.ts +1 -1
  261. package/dist/operations/EulerAngles.js +1 -1
  262. package/dist/operations/EulerAngles.js.map +1 -1
  263. package/dist/operations/Matrix.d.ts +170 -0
  264. package/dist/operations/Matrix.js +405 -0
  265. package/dist/operations/Matrix.js.map +1 -0
  266. package/dist/operations/Quaternion.d.ts +1 -1
  267. package/dist/operations/Quaternion.js +1 -1
  268. package/dist/operations/Quaternion.js.map +1 -1
  269. package/dist/operations/Random.d.ts +40 -0
  270. package/dist/operations/Random.js +50 -0
  271. package/dist/operations/Random.js.map +1 -0
  272. package/dist/operations/RandomGaussianSource.d.ts +1 -1
  273. package/dist/operations/RandomGaussianSource.js +1 -1
  274. package/dist/operations/RandomGaussianSource.js.map +1 -1
  275. package/dist/operations/Vector.d.ts +262 -0
  276. package/dist/operations/Vector.js +415 -0
  277. package/dist/operations/Vector.js.map +1 -0
  278. package/dist/operations/Vector3D.d.ts +86 -0
  279. package/dist/operations/Vector3D.js +241 -0
  280. package/dist/operations/Vector3D.js.map +1 -0
  281. package/dist/operations/operations.d.ts +26 -0
  282. package/dist/operations/operations.js +27 -0
  283. package/dist/operations/operations.js.map +1 -0
  284. package/dist/optimize/ChebyshevCompressor.js +1 -1
  285. package/dist/optimize/ChebyshevCompressor.js.map +1 -1
  286. package/dist/optimize/PolynomialRegression.js +1 -1
  287. package/dist/optimize/PolynomialRegression.js.map +1 -1
  288. package/dist/optimize/SimplexEntry.js +1 -1
  289. package/dist/optimize/SimplexEntry.js.map +1 -1
  290. package/dist/orbit_determination/BatchLeastSquaresOD.d.ts +1 -1
  291. package/dist/orbit_determination/BatchLeastSquaresOD.js +1 -1
  292. package/dist/orbit_determination/BatchLeastSquaresOD.js.map +1 -1
  293. package/dist/orbit_determination/BatchLeastSquaresResult.d.ts +1 -1
  294. package/dist/orbit_determination/GibbsIOD.d.ts +1 -1
  295. package/dist/orbit_determination/GibbsIOD.js +1 -1
  296. package/dist/orbit_determination/GibbsIOD.js.map +1 -1
  297. package/dist/orbit_determination/GoodingIOD.d.ts +1 -1
  298. package/dist/orbit_determination/GoodingIOD.js +1 -1
  299. package/dist/orbit_determination/GoodingIOD.js.map +1 -1
  300. package/dist/orbit_determination/HerrickGibbsIOD.d.ts +1 -1
  301. package/dist/orbit_determination/HerrickGibbsIOD.js +1 -1
  302. package/dist/orbit_determination/HerrickGibbsIOD.js.map +1 -1
  303. package/dist/orbit_determination/LambertIOD.d.ts +1 -1
  304. package/dist/orbit_determination/LambertIOD.js +1 -1
  305. package/dist/orbit_determination/LambertIOD.js.map +1 -1
  306. package/dist/orbit_determination/ModifiedGoodingIOD.d.ts +1 -1
  307. package/dist/orbit_determination/ModifiedGoodingIOD.js +1 -1
  308. package/dist/orbit_determination/ModifiedGoodingIOD.js.map +1 -1
  309. package/dist/orbit_determination/index.d.ts +7 -0
  310. package/dist/orbit_determination/index.js +8 -0
  311. package/dist/orbit_determination/index.js.map +1 -0
  312. package/dist/propagator/KeplerPropagator.d.ts +1 -1
  313. package/dist/propagator/KeplerPropagator.js +1 -1
  314. package/dist/propagator/KeplerPropagator.js.map +1 -1
  315. package/dist/propagator/Propagator.d.ts +1 -1
  316. package/dist/propagator/Propagator.js +1 -1
  317. package/dist/propagator/Propagator.js.map +1 -1
  318. package/dist/propagator/RkCheckpoint.d.ts +1 -1
  319. package/dist/propagator/RkResult.d.ts +1 -1
  320. package/dist/propagator/RungeKutta4Propagator.d.ts +1 -1
  321. package/dist/propagator/RungeKutta4Propagator.js +1 -1
  322. package/dist/propagator/RungeKutta4Propagator.js.map +1 -1
  323. package/dist/propagator/RungeKuttaAdaptive.d.ts +1 -1
  324. package/dist/propagator/RungeKuttaAdaptive.js +1 -1
  325. package/dist/propagator/RungeKuttaAdaptive.js.map +1 -1
  326. package/dist/propagator/Sgp4Propagator.d.ts +1 -1
  327. package/dist/sgp4/index.d.ts +23 -0
  328. package/dist/sgp4/index.js +24 -0
  329. package/dist/sgp4/index.js.map +1 -0
  330. package/dist/sgp4/sgp4-error.d.ts +22 -0
  331. package/dist/sgp4/sgp4-error.js +44 -0
  332. package/dist/sgp4/sgp4-error.js.map +1 -0
  333. package/dist/sgp4/sgp4.d.ts +102 -0
  334. package/dist/sgp4/sgp4.js +3167 -0
  335. package/dist/sgp4/sgp4.js.map +1 -0
  336. package/dist/smoothing/ExponentialSmoothing.d.ts +1 -1
  337. package/dist/time/Epoch.d.ts +44 -0
  338. package/dist/time/Epoch.js +109 -0
  339. package/dist/time/Epoch.js.map +1 -0
  340. package/dist/time/EpochGPS.d.ts +42 -0
  341. package/dist/time/EpochGPS.js +70 -0
  342. package/dist/time/EpochGPS.js.map +1 -0
  343. package/dist/time/EpochTAI.d.ts +26 -0
  344. package/dist/time/EpochTAI.js +27 -0
  345. package/dist/time/EpochTAI.js.map +1 -0
  346. package/dist/time/EpochTDB.d.ts +26 -0
  347. package/dist/time/EpochTDB.js +27 -0
  348. package/dist/time/EpochTDB.js.map +1 -0
  349. package/dist/time/EpochTT.d.ts +26 -0
  350. package/dist/time/EpochTT.js +27 -0
  351. package/dist/time/EpochTT.js.map +1 -0
  352. package/dist/time/EpochUTC.d.ts +59 -0
  353. package/dist/time/EpochUTC.js +137 -0
  354. package/dist/time/EpochUTC.js.map +1 -0
  355. package/dist/time/EpochWindow.d.ts +28 -0
  356. package/dist/time/EpochWindow.js +31 -0
  357. package/dist/time/EpochWindow.js.map +1 -0
  358. package/dist/time/TimeStamped.d.ts +43 -0
  359. package/dist/time/TimeStamped.js +46 -0
  360. package/dist/time/TimeStamped.js.map +1 -0
  361. package/dist/time/index.d.ts +30 -0
  362. package/dist/time/index.js +31 -0
  363. package/dist/time/index.js.map +1 -0
  364. package/dist/transforms/TransformCache.d.ts +27 -0
  365. package/dist/transforms/TransformCache.js +41 -0
  366. package/dist/transforms/TransformCache.js.map +1 -0
  367. package/dist/transforms/conversions.d.ts +63 -0
  368. package/dist/transforms/conversions.js +88 -0
  369. package/dist/transforms/conversions.js.map +1 -0
  370. package/dist/transforms/index.d.ts +1 -0
  371. package/dist/transforms/index.js +1 -0
  372. package/dist/transforms/index.js.map +1 -1
  373. package/dist/transforms/transforms.d.ts +166 -2
  374. package/dist/transforms/transforms.js +372 -1
  375. package/dist/transforms/transforms.js.map +1 -1
  376. package/dist/types/types.d.ts +674 -2
  377. package/dist/types/types.js +36 -0
  378. package/dist/types/types.js.map +1 -1
  379. package/dist/utils/constants.d.ts +80 -0
  380. package/dist/utils/constants.js +87 -0
  381. package/dist/utils/constants.js.map +1 -0
  382. package/dist/utils/functions.d.ts +228 -0
  383. package/dist/utils/functions.js +476 -0
  384. package/dist/utils/functions.js.map +1 -1
  385. package/dist/utils/index.d.ts +3 -1
  386. package/dist/utils/index.js +3 -1
  387. package/dist/utils/index.js.map +1 -1
  388. package/dist/utils/jacobian.d.ts +1 -1
  389. package/dist/utils/jacobian.js +1 -1
  390. package/dist/utils/jacobian.js.map +1 -1
  391. package/dist/utils/linearDistance.d.ts +8 -0
  392. package/dist/utils/linearDistance.js +10 -0
  393. package/dist/utils/linearDistance.js.map +1 -0
  394. package/package.json +4 -7
  395. package/src/body/Celestial.ts +134 -0
  396. package/src/body/Earth.ts +260 -0
  397. package/src/body/Moon.ts +556 -0
  398. package/src/body/NutationAngles.ts +40 -0
  399. package/src/body/PrecessionAngles.ts +31 -0
  400. package/src/body/Sun.ts +669 -0
  401. package/src/body/index.ts +27 -0
  402. package/src/body/suncalc.LICENSE.md +18 -0
  403. package/src/coordinate/ClassicalElements.ts +326 -0
  404. package/src/coordinate/EquinoctialElements.ts +189 -0
  405. package/src/coordinate/FormatTle.ts +214 -0
  406. package/src/coordinate/Geodetic.ts +186 -0
  407. package/src/coordinate/Hill.ts +1 -1
  408. package/src/coordinate/ITRF.ts +146 -0
  409. package/src/coordinate/J2000.ts +130 -0
  410. package/src/coordinate/RIC.ts +87 -0
  411. package/src/coordinate/RelativeState.ts +101 -0
  412. package/src/coordinate/StateVector.ts +122 -0
  413. package/src/coordinate/TEME.ts +97 -0
  414. package/src/coordinate/Tle.ts +1024 -0
  415. package/src/coordinate/index.ts +12 -0
  416. package/src/coordinate/tle-format-data.ts +47 -0
  417. package/src/covariance/CovarianceSample.ts +1 -1
  418. package/src/covariance/StateCovariance.ts +1 -1
  419. package/src/data/DataHandler.ts +88 -0
  420. package/src/data/values/Egm96Data.ts +75 -0
  421. package/src/data/values/HpAtmosphereData.ts +76 -0
  422. package/src/data/values/HpAtmosphereResult.ts +41 -0
  423. package/src/data/values/Iau1980Data.ts +63 -0
  424. package/src/data/values/LeapSecond.ts +37 -0
  425. package/src/data/values/LeapSecondData.ts +113 -0
  426. package/src/data/values/egm96.ts +728 -0
  427. package/src/data/values/hpAtmosphere.ts +79 -0
  428. package/src/data/values/iau1980.ts +32 -0
  429. package/src/enums/AngularDiameterMethod.ts +28 -0
  430. package/src/enums/AngularDistanceMethod.ts +28 -0
  431. package/src/enums/OrbitRegime.ts +31 -0
  432. package/src/enums/PassType.ts +29 -0
  433. package/src/enums/Sgp4OpsMode.ts +27 -0
  434. package/src/enums/index.ts +5 -0
  435. package/src/force/AtmosphericDrag.ts +1 -1
  436. package/src/force/EarthGravity.ts +1 -1
  437. package/src/force/Force.ts +1 -1
  438. package/src/force/ForceModel.ts +1 -1
  439. package/src/force/Gravity.ts +1 -1
  440. package/src/force/SolarRadiationPressure.ts +1 -1
  441. package/src/force/ThirdBodyGravity.ts +1 -1
  442. package/src/force/Thrust.ts +1 -1
  443. package/src/interfaces/BaseObjectParams.ts +33 -0
  444. package/src/interfaces/ClassicalElementsParams.ts +35 -0
  445. package/src/interfaces/EquinoctialElementsParams.ts +37 -0
  446. package/src/interfaces/GroundPositionParams.ts +30 -0
  447. package/src/interfaces/OmmFormat.ts +63 -0
  448. package/src/interfaces/OptionsParams.ts +3 -0
  449. package/src/interfaces/RfSensorParams.ts +1 -1
  450. package/src/interfaces/SatelliteParams.ts +20 -0
  451. package/src/interfaces/SensorParams.ts +39 -0
  452. package/src/interfaces/StarObjectParams.ts +11 -0
  453. package/src/interfaces/TimeVariables.ts +7 -0
  454. package/src/interfaces/index.ts +8 -0
  455. package/src/interpolator/ChebyshevCoefficients.ts +1 -1
  456. package/src/interpolator/ChebyshevInterpolator.ts +1 -1
  457. package/src/interpolator/CubicSpline.ts +1 -1
  458. package/src/interpolator/CubicSplineInterpolator.ts +1 -1
  459. package/src/interpolator/Interpolator.ts +1 -1
  460. package/src/interpolator/LagrangeInterpolator.ts +1 -1
  461. package/src/interpolator/StateInterpolator.ts +1 -1
  462. package/src/interpolator/VerletBlendInterpolator.ts +1 -1
  463. package/src/main.ts +11 -3
  464. package/src/maneuver/TwoBurnOrbitTransfer.ts +1 -1
  465. package/src/maneuver/Waypoint.ts +1 -1
  466. package/src/objects/BaseObject.ts +171 -0
  467. package/src/objects/DetailedSatellite.ts +3 -3
  468. package/src/objects/DetailedSensor.ts +2 -1
  469. package/src/objects/GroundObject.ts +176 -0
  470. package/src/objects/LandObject.ts +2 -1
  471. package/src/objects/Marker.ts +1 -1
  472. package/src/objects/RfSensor.ts +1 -2
  473. package/src/objects/Satellite.ts +552 -0
  474. package/src/objects/Sensor.ts +280 -0
  475. package/src/objects/Star.ts +96 -0
  476. package/src/objects/index.ts +5 -0
  477. package/src/observation/Observation.ts +1 -1
  478. package/src/observation/ObservationOptical.ts +1 -1
  479. package/src/observation/ObservationRadar.ts +1 -1
  480. package/src/observation/ObservationUtils.ts +30 -1
  481. package/src/observation/RAE.ts +262 -0
  482. package/src/observation/RadecGeocentric.ts +206 -0
  483. package/src/observation/RadecTopocentric.ts +241 -0
  484. package/src/observation/index.ts +27 -0
  485. package/src/operations/BoxMuller.ts +1 -1
  486. package/src/operations/EulerAngles.ts +1 -1
  487. package/src/operations/Matrix.ts +473 -0
  488. package/src/operations/Quaternion.ts +1 -1
  489. package/src/operations/Random.ts +54 -0
  490. package/src/operations/RandomGaussianSource.ts +1 -1
  491. package/src/operations/Vector.ts +484 -0
  492. package/src/operations/Vector3D.ts +289 -0
  493. package/src/operations/operations.ts +27 -0
  494. package/src/optimize/ChebyshevCompressor.ts +1 -1
  495. package/src/optimize/PolynomialRegression.ts +1 -1
  496. package/src/optimize/SimplexEntry.ts +1 -1
  497. package/src/orbit_determination/BatchLeastSquaresOD.ts +1 -1
  498. package/src/orbit_determination/BatchLeastSquaresResult.ts +1 -1
  499. package/src/orbit_determination/GibbsIOD.ts +3 -1
  500. package/src/orbit_determination/GoodingIOD.ts +1 -1
  501. package/src/orbit_determination/HerrickGibbsIOD.ts +1 -1
  502. package/src/orbit_determination/LambertIOD.ts +1 -1
  503. package/src/orbit_determination/ModifiedGoodingIOD.ts +1 -1
  504. package/src/orbit_determination/index.ts +7 -0
  505. package/src/propagator/KeplerPropagator.ts +1 -1
  506. package/src/propagator/Propagator.ts +1 -1
  507. package/src/propagator/RkCheckpoint.ts +1 -1
  508. package/src/propagator/RkResult.ts +1 -1
  509. package/src/propagator/RungeKutta4Propagator.ts +1 -1
  510. package/src/propagator/RungeKuttaAdaptive.ts +1 -1
  511. package/src/propagator/Sgp4Propagator.ts +1 -1
  512. package/src/sgp4/index.ts +24 -0
  513. package/src/sgp4/sgp4-error.ts +53 -0
  514. package/src/sgp4/sgp4.LICENSE.md +28 -0
  515. package/src/sgp4/sgp4.ts +3986 -0
  516. package/src/smoothing/ExponentialSmoothing.ts +1 -1
  517. package/src/time/Epoch.ts +128 -0
  518. package/src/time/EpochGPS.ts +76 -0
  519. package/src/time/EpochTAI.ts +27 -0
  520. package/src/time/EpochTDB.ts +27 -0
  521. package/src/time/EpochTT.ts +27 -0
  522. package/src/time/EpochUTC.ts +188 -0
  523. package/src/time/EpochWindow.ts +33 -0
  524. package/src/time/TimeStamped.ts +50 -0
  525. package/src/time/index.ts +31 -0
  526. package/src/transforms/TransformCache.ts +46 -0
  527. package/src/transforms/conversions.ts +98 -0
  528. package/src/transforms/index.ts +1 -0
  529. package/src/transforms/transforms.ts +478 -2
  530. package/src/types/types.ts +721 -2
  531. package/src/utils/constants.ts +113 -0
  532. package/src/utils/functions.ts +562 -0
  533. package/src/utils/index.ts +3 -1
  534. package/src/utils/jacobian.ts +1 -1
  535. package/src/utils/linearDistance.ts +11 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ObservationUtils.js","sourceRoot":"","sources":["../../src/observation/ObservationUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAS,EAAE,CAAS,EAAU,EAAE;IAC7D,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAEhB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,EAAU,EAAE,EAAU,EAAE,IAAY,EAAE,OAAO,GAAG,KAAK,EAAU,EAAE,CACrG,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;AAEtD,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,MAAgB,EAAU,EAAE;IACrE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IACxB,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAEnE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAEpB,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC,CAAC"}
1
+ {"version":3,"file":"ObservationUtils.js","sourceRoot":"","sources":["../../src/observation/ObservationUtils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * @author Theodore Kruczek.
3
+ * @license MIT
4
+ * @copyright (c) 2022-2025 Theodore Kruczek Permission is
5
+ * hereby granted, free of charge, to any person obtaining a copy of this
6
+ * software and associated documentation files (the "Software"), to deal in the
7
+ * Software without restriction, including without limitation the rights to use,
8
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9
+ * the Software, and to permit persons to whom the Software is furnished to do
10
+ * so, subject to the following conditions:
11
+ *
12
+ * The above copyright notice and this permission notice shall be included in
13
+ * all copies or substantial portions of the Software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ * SOFTWARE.
22
+ */
23
+ import { J2000 } from '../coordinate/J2000.js';
24
+ import { AngularDistanceMethod } from '../enums/AngularDistanceMethod.js';
25
+ import { Degrees, Kilometers, Radians } from '../main.js';
26
+ import { Vector3D } from '../operations/Vector3D.js';
27
+ import { EpochUTC } from '../time/EpochUTC.js';
28
+ export declare class RAE {
29
+ epoch: EpochUTC;
30
+ rng: Kilometers;
31
+ azRad: Radians;
32
+ elRad: Radians;
33
+ /** The range rate of the satellite relative to the observer in kilometers per second. */
34
+ rngRate?: number | undefined;
35
+ /** The azimuth rate of the satellite relative to the observer in radians per second. */
36
+ azRateRad?: number | undefined;
37
+ /** The elevation rate of the satellite relative to the observer in radians per second. */
38
+ elRateRad?: number | undefined;
39
+ constructor(epoch: EpochUTC, rng: Kilometers, azRad: Radians, elRad: Radians,
40
+ /** The range rate of the satellite relative to the observer in kilometers per second. */
41
+ rngRate?: number | undefined,
42
+ /** The azimuth rate of the satellite relative to the observer in radians per second. */
43
+ azRateRad?: number | undefined,
44
+ /** The elevation rate of the satellite relative to the observer in radians per second. */
45
+ elRateRad?: number | undefined);
46
+ static fromDegrees(epoch: EpochUTC, range: Kilometers, azimuth: Degrees, elevation: Degrees, rangeRate?: number, azimuthRate?: number, elevationRate?: number): RAE;
47
+ /**
48
+ * Create a [Razel] object from an inertial [state] and [site] vector.
49
+ * @param state The inertial [state] vector.
50
+ * @param site The observer [site] vector.
51
+ * @returns A new [Razel] object.
52
+ */
53
+ static fromStateVector(state: J2000, site: J2000): RAE;
54
+ /**
55
+ * Gets the azimuth in degrees.
56
+ * @returns The azimuth in degrees.
57
+ */
58
+ get az(): Degrees;
59
+ /**
60
+ * Gets the elevation angle in degrees.
61
+ * @returns The elevation angle in degrees.
62
+ */
63
+ get el(): Degrees;
64
+ /**
65
+ * Gets the azimuth rate in degrees per second.
66
+ * @returns The azimuth rate in degrees per second, or undefined if it is not available.
67
+ */
68
+ get azRate(): number | undefined;
69
+ /**
70
+ * Gets the elevation rate in degrees per second.
71
+ * @returns The elevation rate in degrees per second, or undefined if the elevation rate is not set.
72
+ */
73
+ get elRate(): number | undefined;
74
+ toString(): string;
75
+ /**
76
+ * Return the position relative to the observer [site].
77
+ *
78
+ * An optional azimuth [az] _(rad)_ and elevation [el] _(rad)_ value can be
79
+ * passed to override the values contained in this observation.
80
+ * @param site The observer [site].
81
+ * @param azRad Azimuth _(rad)_.
82
+ * @param elRad Elevation _(rad)_.
83
+ * @returns A [Vector3D] object.
84
+ */
85
+ position(site: J2000, azRad?: Radians, elRad?: Radians): Vector3D<Kilometers>;
86
+ /**
87
+ * Convert this observation into a [J2000] state vector.
88
+ *
89
+ * This will throw an error if the [rangeRate], [elevationRate], or
90
+ * [azimuthRate] are not defined.
91
+ * @param site The observer [site].
92
+ * @returns A [J2000] state vector.
93
+ */
94
+ toStateVector(site: J2000): J2000;
95
+ /**
96
+ * Calculate the angular distance _(rad)_ between this and another [Razel]
97
+ * object.
98
+ * @param razel The other [Razel] object.
99
+ * @param method The angular distance method to use.
100
+ * @returns The angular distance _(rad)_.
101
+ */
102
+ angle(razel: RAE, method?: AngularDistanceMethod): number;
103
+ /**
104
+ * Calculate the angular distance _(°)_ between this and another [Razel]
105
+ * object.
106
+ * @param razel The other [Razel] object.
107
+ * @param method The angular distance method to use.
108
+ * @returns The angular distance _(°)_.
109
+ */
110
+ angleDegrees(razel: RAE, method?: AngularDistanceMethod): number;
111
+ }
@@ -0,0 +1,215 @@
1
+ /**
2
+ * @author Theodore Kruczek.
3
+ * @license MIT
4
+ * @copyright (c) 2022-2025 Theodore Kruczek Permission is
5
+ * hereby granted, free of charge, to any person obtaining a copy of this
6
+ * software and associated documentation files (the "Software"), to deal in the
7
+ * Software without restriction, including without limitation the rights to use,
8
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9
+ * the Software, and to permit persons to whom the Software is furnished to do
10
+ * so, subject to the following conditions:
11
+ *
12
+ * The above copyright notice and this permission notice shall be included in
13
+ * all copies or substantial portions of the Software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ * SOFTWARE.
22
+ */
23
+ /* eslint-disable no-undefined */
24
+ import { ITRF } from '../coordinate/ITRF.js';
25
+ import { AngularDistanceMethod } from '../enums/AngularDistanceMethod.js';
26
+ import { Vector3D } from '../operations/Vector3D.js';
27
+ import { DEG2RAD, halfPi, RAD2DEG, TAU } from '../utils/constants.js';
28
+ import { angularDistance } from '../utils/functions.js';
29
+ // / Range, azimuth, and elevation.
30
+ export class RAE {
31
+ epoch;
32
+ rng;
33
+ azRad;
34
+ elRad;
35
+ rngRate;
36
+ azRateRad;
37
+ elRateRad;
38
+ constructor(epoch, rng, azRad, elRad,
39
+ /** The range rate of the satellite relative to the observer in kilometers per second. */
40
+ rngRate,
41
+ /** The azimuth rate of the satellite relative to the observer in radians per second. */
42
+ azRateRad,
43
+ /** The elevation rate of the satellite relative to the observer in radians per second. */
44
+ elRateRad) {
45
+ this.epoch = epoch;
46
+ this.rng = rng;
47
+ this.azRad = azRad;
48
+ this.elRad = elRad;
49
+ this.rngRate = rngRate;
50
+ this.azRateRad = azRateRad;
51
+ this.elRateRad = elRateRad;
52
+ // Do nothing
53
+ }
54
+ // / Create a new [Razel] object, using degrees for the angular values.
55
+ static fromDegrees(epoch, range, azimuth, elevation, rangeRate, azimuthRate, elevationRate) {
56
+ const azimuthRateRad = azimuthRate ? azimuthRate * DEG2RAD : undefined;
57
+ const elevationRateRad = elevationRate ? elevationRate * DEG2RAD : undefined;
58
+ return new RAE(epoch, range, (azimuth * DEG2RAD), (elevation * DEG2RAD), rangeRate, azimuthRateRad, elevationRateRad);
59
+ }
60
+ /**
61
+ * Create a [Razel] object from an inertial [state] and [site] vector.
62
+ * @param state The inertial [state] vector.
63
+ * @param site The observer [site] vector.
64
+ * @returns A new [Razel] object.
65
+ */
66
+ static fromStateVector(state, site) {
67
+ const stateEcef = state.toITRF();
68
+ const siteEcef = site.toITRF();
69
+ const po2 = halfPi;
70
+ const r = stateEcef.position.subtract(siteEcef.position);
71
+ const rDot = stateEcef.velocity;
72
+ const geo = siteEcef.toGeodetic();
73
+ const p = r.rotZ(geo.lon).rotY((po2 - geo.lat));
74
+ const pDot = rDot.rotZ(geo.lon).rotY((po2 - geo.lat));
75
+ const pS = p.x;
76
+ const pE = p.y;
77
+ const pZ = p.z;
78
+ const pSDot = pDot.x;
79
+ const pEDot = pDot.y;
80
+ const pZDot = pDot.z;
81
+ const pMag = p.magnitude();
82
+ const pSEMag = Math.sqrt(pS * pS + pE * pE);
83
+ const elevation = Math.asin(pZ / pMag);
84
+ let azimuth;
85
+ if (elevation !== po2) {
86
+ azimuth = Math.atan2(-pE, pS) + Math.PI;
87
+ }
88
+ else {
89
+ azimuth = Math.atan2(-pEDot, pSDot) + Math.PI;
90
+ }
91
+ const rangeRate = p.dot(pDot) / pMag;
92
+ const azimuthRate = (pSDot * pE - pEDot * pS) / (pS * pS + pE * pE);
93
+ const elevationRate = (pZDot - rangeRate * Math.sin(elevation)) / pSEMag;
94
+ return new RAE(state.epoch, pMag, (azimuth % TAU), elevation, rangeRate, azimuthRate, elevationRate);
95
+ }
96
+ /**
97
+ * Gets the azimuth in degrees.
98
+ * @returns The azimuth in degrees.
99
+ */
100
+ get az() {
101
+ return this.azRad * RAD2DEG;
102
+ }
103
+ /**
104
+ * Gets the elevation angle in degrees.
105
+ * @returns The elevation angle in degrees.
106
+ */
107
+ get el() {
108
+ return this.elRad * RAD2DEG;
109
+ }
110
+ /**
111
+ * Gets the azimuth rate in degrees per second.
112
+ * @returns The azimuth rate in degrees per second, or undefined if it is not available.
113
+ */
114
+ get azRate() {
115
+ return this.azRateRad ? this.azRateRad * RAD2DEG : undefined;
116
+ }
117
+ /**
118
+ * Gets the elevation rate in degrees per second.
119
+ * @returns The elevation rate in degrees per second, or undefined if the elevation rate is not set.
120
+ */
121
+ get elRate() {
122
+ return this.elRateRad ? this.elRateRad * RAD2DEG : undefined;
123
+ }
124
+ toString() {
125
+ return [
126
+ '[RazEl]',
127
+ ` Epoch: ${this.epoch}`,
128
+ ` Azimuth: ${this.az.toFixed(4)}°`,
129
+ ` Elevation: ${this.el.toFixed(4)}°`,
130
+ ` Range: ${this.rng.toFixed(3)} km`,
131
+ ].join('\n');
132
+ }
133
+ /**
134
+ * Return the position relative to the observer [site].
135
+ *
136
+ * An optional azimuth [az] _(rad)_ and elevation [el] _(rad)_ value can be
137
+ * passed to override the values contained in this observation.
138
+ * @param site The observer [site].
139
+ * @param azRad Azimuth _(rad)_.
140
+ * @param elRad Elevation _(rad)_.
141
+ * @returns A [Vector3D] object.
142
+ */
143
+ position(site, azRad, elRad) {
144
+ const ecef = site.toITRF();
145
+ const geo = ecef.toGeodetic();
146
+ const po2 = halfPi;
147
+ const newAz = azRad ?? this.azRad;
148
+ const newEl = elRad ?? this.elRad;
149
+ const sAz = Math.sin(newAz);
150
+ const cAz = Math.cos(newAz);
151
+ const sEl = Math.sin(newEl);
152
+ const cEl = Math.cos(newEl);
153
+ const pSez = new Vector3D((-this.rng * cEl * cAz), (this.rng * cEl * sAz), (this.rng * sEl));
154
+ const rEcef = pSez
155
+ .rotY(-(po2 - geo.lat))
156
+ .rotZ(-geo.lon)
157
+ .add(ecef.position);
158
+ return new ITRF(this.epoch, rEcef, Vector3D.origin).toJ2000().position;
159
+ }
160
+ /**
161
+ * Convert this observation into a [J2000] state vector.
162
+ *
163
+ * This will throw an error if the [rangeRate], [elevationRate], or
164
+ * [azimuthRate] are not defined.
165
+ * @param site The observer [site].
166
+ * @returns A [J2000] state vector.
167
+ */
168
+ toStateVector(site) {
169
+ // If the rates are not defined then assume stationary
170
+ this.rngRate ??= 0;
171
+ this.elRateRad ??= 0;
172
+ this.azRateRad ??= 0;
173
+ const ecef = site.toITRF();
174
+ const geo = ecef.toGeodetic();
175
+ const po2 = halfPi;
176
+ const sAz = Math.sin(this.azRad);
177
+ const cAz = Math.cos(this.azRad);
178
+ const sEl = Math.sin(this.elRad);
179
+ const cEl = Math.cos(this.elRad);
180
+ const pSez = new Vector3D((-this.rng * cEl * cAz), (this.rng * cEl * sAz), (this.rng * sEl));
181
+ const pDotSez = new Vector3D((-this.rngRate * cEl * cAz +
182
+ this.rng * sEl * cAz * this.elRateRad +
183
+ this.rng * cEl * sAz * this.azRateRad), (this.rngRate * cEl * sAz -
184
+ this.rng * sEl * sAz * this.elRateRad +
185
+ this.rng * cEl * cAz * this.azRateRad), (this.rngRate * sEl + this.rng * cEl * this.elRateRad));
186
+ const pEcef = pSez.rotY(-(po2 - geo.lat)).rotZ(-geo.lon);
187
+ const pDotEcef = pDotSez
188
+ .rotY(-(po2 - geo.lat))
189
+ // TODO: #13 Intermediate unit type is incorrect.
190
+ .rotZ(-geo.lon);
191
+ const rEcef = pEcef.add(ecef.position);
192
+ return new ITRF(this.epoch, rEcef, pDotEcef).toJ2000();
193
+ }
194
+ /**
195
+ * Calculate the angular distance _(rad)_ between this and another [Razel]
196
+ * object.
197
+ * @param razel The other [Razel] object.
198
+ * @param method The angular distance method to use.
199
+ * @returns The angular distance _(rad)_.
200
+ */
201
+ angle(razel, method = AngularDistanceMethod.Cosine) {
202
+ return angularDistance(this.azRad, this.elRad, razel.azRad, razel.elRad, method);
203
+ }
204
+ /**
205
+ * Calculate the angular distance _(°)_ between this and another [Razel]
206
+ * object.
207
+ * @param razel The other [Razel] object.
208
+ * @param method The angular distance method to use.
209
+ * @returns The angular distance _(°)_.
210
+ */
211
+ angleDegrees(razel, method = AngularDistanceMethod.Cosine) {
212
+ return this.angle(razel, method) * RAD2DEG;
213
+ }
214
+ }
215
+ //# sourceMappingURL=RAE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RAE.js","sourceRoot":"","sources":["../../src/observation/RAE.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,iCAAiC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAE7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAE1E,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,mCAAmC;AACnC,MAAM,OAAO,GAAG;IAEL;IACA;IACA;IACA;IAEA;IAEA;IAEA;IAVT,YACS,KAAe,EACf,GAAe,EACf,KAAc,EACd,KAAc;IACrB,yFAAyF;IAClF,OAAgB;IACvB,wFAAwF;IACjF,SAAkB;IACzB,0FAA0F;IACnF,SAAkB;QATlB,UAAK,GAAL,KAAK,CAAU;QACf,QAAG,GAAH,GAAG,CAAY;QACf,UAAK,GAAL,KAAK,CAAS;QACd,UAAK,GAAL,KAAK,CAAS;QAEd,YAAO,GAAP,OAAO,CAAS;QAEhB,cAAS,GAAT,SAAS,CAAS;QAElB,cAAS,GAAT,SAAS,CAAS;QAEzB,aAAa;IACf,CAAC;IAED,uEAAuE;IACvE,MAAM,CAAC,WAAW,CAChB,KAAe,EACf,KAAiB,EACjB,OAAgB,EAChB,SAAkB,EAClB,SAAkB,EAClB,WAAoB,EACpB,aAAsB;QAEtB,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QACvE,MAAM,gBAAgB,GAAG,aAAa,CAAC,CAAC,CAAC,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QAE7E,OAAO,IAAI,GAAG,CACZ,KAAK,EACL,KAAK,EACL,CAAC,OAAO,GAAG,OAAO,CAAY,EAC9B,CAAC,SAAS,GAAG,OAAO,CAAY,EAChC,SAAS,EACT,cAAc,EACd,gBAAgB,CACjB,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,eAAe,CAAC,KAAY,EAAE,IAAW;QAC9C,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,MAAM,CAAC;QACnB,MAAM,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC;QAChC,MAAM,GAAG,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAY,CAAC,CAAC;QAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAY,CAAC,CAAC;QACjE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QACf,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QACf,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;QACrB,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;QACvC,IAAI,OAAO,CAAC;QAEZ,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;YACtB,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;QAChD,CAAC;QACD,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QACrC,MAAM,WAAW,GAAG,CAAC,KAAK,GAAG,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACpE,MAAM,aAAa,GAAG,CAAC,KAAK,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC;QAEzE,OAAO,IAAI,GAAG,CACZ,KAAK,CAAC,KAAK,EACX,IAAI,EACJ,CAAC,OAAO,GAAG,GAAG,CAAY,EAC1B,SAAoB,EACpB,SAAS,EACT,WAAW,EACX,aAAa,CACd,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,KAAK,GAAG,OAAkB,CAAC;IACzC,CAAC;IAED;;;OAGG;IACH,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,KAAK,GAAG,OAAkB,CAAC;IACzC,CAAC;IAED;;;OAGG;IACH,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/D,CAAC;IAED;;;OAGG;IACH,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/D,CAAC;IAED,QAAQ;QACN,OAAO;YACL,SAAS;YACT,gBAAgB,IAAI,CAAC,KAAK,EAAE;YAC5B,gBAAgB,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;YACrC,gBAAgB,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;YACrC,gBAAgB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;SACzC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IAED;;;;;;;;;OASG;IACH,QAAQ,CAAC,IAAW,EAAE,KAAe,EAAE,KAAe;QACpD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,MAAM,CAAC;QACnB,MAAM,KAAK,GAAG,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC;QAClC,MAAM,KAAK,GAAG,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,QAAQ,CACvB,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAe,EACrC,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAe,EACpC,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAe,CAC/B,CAAC;QACF,MAAM,KAAK,GAAG,IAAI;aACf,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAY,CAAC;aACjC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAc,CAAC;aACzB,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEtB,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAuC,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;IAC1G,CAAC;IAED;;;;;;;OAOG;IACH,aAAa,CAAC,IAAW;QACvB,sDAAsD;QACtD,IAAI,CAAC,OAAO,KAAK,CAAC,CAAC;QACnB,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC;QACrB,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC;QAErB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,MAAM,CAAC;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,QAAQ,CACvB,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAe,EACrC,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAe,EACpC,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAe,CAC/B,CAAC;QACF,MAAM,OAAO,GAAG,IAAI,QAAQ,CAC1B,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,GAAG,GAAG,GAAG;YACxB,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS;YACrC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS,CAAe,EACtD,CAAC,IAAI,CAAC,OAAO,GAAG,GAAG,GAAG,GAAG;YACvB,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS;YACrC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS,CAAe,EACtD,CAAC,IAAI,CAAC,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS,CAAe,CACrE,CAAC;QACF,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAY,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAc,CAAC,CAAC;QAC/E,MAAM,QAAQ,GAAG,OAAO;aACrB,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAY,CAAC;YAClC,iDAAiD;aAChD,IAAI,CAAC,CAAC,GAAG,CAAC,GAAc,CAA6C,CAAC;QACzE,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEvC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;IACzD,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,KAAU,EAAE,SAAgC,qBAAqB,CAAC,MAAM;QAC5E,OAAO,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACnF,CAAC;IAED;;;;;;OAMG;IACH,YAAY,CAAC,KAAU,EAAE,SAAgC,qBAAqB,CAAC,MAAM;QACnF,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC;IAC7C,CAAC;CACF"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * @author Theodore Kruczek.
3
+ * @license MIT
4
+ * @copyright (c) 2022-2025 Theodore Kruczek Permission is
5
+ * hereby granted, free of charge, to any person obtaining a copy of this
6
+ * software and associated documentation files (the "Software"), to deal in the
7
+ * Software without restriction, including without limitation the rights to use,
8
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9
+ * the Software, and to permit persons to whom the Software is furnished to do
10
+ * so, subject to the following conditions:
11
+ *
12
+ * The above copyright notice and this permission notice shall be included in
13
+ * all copies or substantial portions of the Software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ * SOFTWARE.
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 Theodore Kruczek.
3
+ * @license MIT
4
+ * @copyright (c) 2022-2025 Theodore Kruczek Permission is
5
+ * hereby granted, free of charge, to any person obtaining a copy of this
6
+ * software and associated documentation files (the "Software"), to deal in the
7
+ * Software without restriction, including without limitation the rights to use,
8
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9
+ * the Software, and to permit persons to whom the Software is furnished to do
10
+ * so, subject to the following conditions:
11
+ *
12
+ * The above copyright notice and this permission notice shall be included in
13
+ * all copies or substantial portions of the Software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ * SOFTWARE.
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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"}