ootk 4.0.8 → 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 (536) hide show
  1. package/CHANGELOG.md +9 -2
  2. package/README.md +0 -15
  3. package/dist/body/Celestial.d.ts +96 -0
  4. package/dist/body/Celestial.js +124 -0
  5. package/dist/body/Celestial.js.map +1 -0
  6. package/dist/body/Earth.d.ts +68 -0
  7. package/dist/body/Earth.js +198 -0
  8. package/dist/body/Earth.js.map +1 -0
  9. package/dist/body/Moon.d.ts +137 -0
  10. package/dist/body/Moon.js +464 -0
  11. package/dist/body/Moon.js.map +1 -0
  12. package/dist/body/NutationAngles.d.ts +38 -0
  13. package/dist/body/NutationAngles.js +24 -0
  14. package/dist/body/NutationAngles.js.map +1 -0
  15. package/dist/body/PrecessionAngles.d.ts +29 -0
  16. package/dist/body/PrecessionAngles.js +24 -0
  17. package/dist/body/PrecessionAngles.js.map +1 -0
  18. package/dist/body/Sun.d.ts +305 -0
  19. package/dist/body/Sun.js +548 -0
  20. package/dist/body/Sun.js.map +1 -0
  21. package/dist/body/index.d.ts +26 -0
  22. package/dist/body/index.js +27 -0
  23. package/dist/body/index.js.map +1 -0
  24. package/dist/coordinate/ClassicalElements.d.ts +132 -0
  25. package/dist/coordinate/ClassicalElements.js +279 -0
  26. package/dist/coordinate/ClassicalElements.js.map +1 -0
  27. package/dist/coordinate/EquinoctialElements.d.ts +114 -0
  28. package/dist/coordinate/EquinoctialElements.js +172 -0
  29. package/dist/coordinate/EquinoctialElements.js.map +1 -0
  30. package/dist/coordinate/FormatTle.d.ts +95 -0
  31. package/dist/coordinate/FormatTle.js +184 -0
  32. package/dist/coordinate/FormatTle.js.map +1 -0
  33. package/dist/coordinate/Geodetic.d.ts +110 -0
  34. package/dist/coordinate/Geodetic.js +163 -0
  35. package/dist/coordinate/Geodetic.js.map +1 -0
  36. package/dist/coordinate/Hill.d.ts +1 -1
  37. package/dist/coordinate/Hill.js +1 -1
  38. package/dist/coordinate/Hill.js.map +1 -1
  39. package/dist/coordinate/ITRF.d.ts +75 -0
  40. package/dist/coordinate/ITRF.js +135 -0
  41. package/dist/coordinate/ITRF.js.map +1 -0
  42. package/dist/coordinate/J2000.d.ts +65 -0
  43. package/dist/coordinate/J2000.js +120 -0
  44. package/dist/coordinate/J2000.js.map +1 -0
  45. package/dist/coordinate/RIC.d.ts +64 -0
  46. package/dist/coordinate/RIC.js +79 -0
  47. package/dist/coordinate/RIC.js.map +1 -0
  48. package/dist/coordinate/RelativeState.d.ts +70 -0
  49. package/dist/coordinate/RelativeState.js +79 -0
  50. package/dist/coordinate/RelativeState.js.map +1 -0
  51. package/dist/coordinate/StateVector.d.ts +76 -0
  52. package/dist/coordinate/StateVector.js +97 -0
  53. package/dist/coordinate/StateVector.js.map +1 -0
  54. package/dist/coordinate/TEME.d.ts +57 -0
  55. package/dist/coordinate/TEME.js +89 -0
  56. package/dist/coordinate/TEME.js.map +1 -0
  57. package/dist/coordinate/Tle.d.ts +430 -0
  58. package/dist/coordinate/Tle.js +865 -0
  59. package/dist/coordinate/Tle.js.map +1 -0
  60. package/dist/coordinate/index.d.ts +11 -0
  61. package/dist/coordinate/index.js +12 -0
  62. package/dist/coordinate/index.js.map +1 -1
  63. package/dist/coordinate/tle-format-data.d.ts +41 -0
  64. package/dist/coordinate/tle-format-data.js +46 -0
  65. package/dist/coordinate/tle-format-data.js.map +1 -0
  66. package/dist/covariance/CovarianceSample.d.ts +1 -1
  67. package/dist/covariance/CovarianceSample.js +1 -1
  68. package/dist/covariance/CovarianceSample.js.map +1 -1
  69. package/dist/covariance/StateCovariance.d.ts +1 -1
  70. package/dist/covariance/StateCovariance.js +1 -1
  71. package/dist/covariance/StateCovariance.js.map +1 -1
  72. package/dist/data/DataHandler.d.ts +66 -0
  73. package/dist/data/DataHandler.js +80 -0
  74. package/dist/data/DataHandler.js.map +1 -0
  75. package/dist/data/values/Egm96Data.d.ts +37 -0
  76. package/dist/data/values/Egm96Data.js +63 -0
  77. package/dist/data/values/Egm96Data.js.map +1 -0
  78. package/dist/data/values/HpAtmosphereData.d.ts +33 -0
  79. package/dist/data/values/HpAtmosphereData.js +58 -0
  80. package/dist/data/values/HpAtmosphereData.js.map +1 -0
  81. package/dist/data/values/HpAtmosphereResult.d.ts +29 -0
  82. package/dist/data/values/HpAtmosphereResult.js +38 -0
  83. package/dist/data/values/HpAtmosphereResult.js.map +1 -0
  84. package/dist/data/values/Iau1980Data.d.ts +36 -0
  85. package/dist/data/values/Iau1980Data.js +52 -0
  86. package/dist/data/values/Iau1980Data.js.map +1 -0
  87. package/dist/data/values/LeapSecond.d.ts +27 -0
  88. package/dist/data/values/LeapSecond.js +35 -0
  89. package/dist/data/values/LeapSecond.js.map +1 -0
  90. package/dist/data/values/LeapSecondData.d.ts +41 -0
  91. package/dist/data/values/LeapSecondData.js +103 -0
  92. package/dist/data/values/LeapSecondData.js.map +1 -0
  93. package/dist/data/values/egm96.d.ts +24 -0
  94. package/dist/data/values/egm96.js +726 -0
  95. package/dist/data/values/egm96.js.map +1 -0
  96. package/dist/data/values/hpAtmosphere.d.ts +24 -0
  97. package/dist/data/values/hpAtmosphere.js +76 -0
  98. package/dist/data/values/hpAtmosphere.js.map +1 -0
  99. package/dist/data/values/iau1980.d.ts +24 -0
  100. package/dist/data/values/iau1980.js +30 -0
  101. package/dist/data/values/iau1980.js.map +1 -0
  102. package/dist/enums/AngularDiameterMethod.d.ts +27 -0
  103. package/dist/enums/AngularDiameterMethod.js +29 -0
  104. package/dist/enums/AngularDiameterMethod.js.map +1 -0
  105. package/dist/enums/AngularDistanceMethod.d.ts +27 -0
  106. package/dist/enums/AngularDistanceMethod.js +29 -0
  107. package/dist/enums/AngularDistanceMethod.js.map +1 -0
  108. package/dist/enums/OrbitRegime.d.ts +30 -0
  109. package/dist/enums/OrbitRegime.js +32 -0
  110. package/dist/enums/OrbitRegime.js.map +1 -0
  111. package/dist/enums/PassType.d.ts +28 -0
  112. package/dist/enums/PassType.js +30 -0
  113. package/dist/enums/PassType.js.map +1 -0
  114. package/dist/enums/Sgp4OpsMode.d.ts +26 -0
  115. package/dist/enums/Sgp4OpsMode.js +28 -0
  116. package/dist/enums/Sgp4OpsMode.js.map +1 -0
  117. package/dist/enums/index.d.ts +5 -0
  118. package/dist/enums/index.js +5 -0
  119. package/dist/enums/index.js.map +1 -1
  120. package/dist/force/AtmosphericDrag.d.ts +1 -1
  121. package/dist/force/AtmosphericDrag.js +1 -1
  122. package/dist/force/AtmosphericDrag.js.map +1 -1
  123. package/dist/force/EarthGravity.d.ts +1 -1
  124. package/dist/force/EarthGravity.js +1 -1
  125. package/dist/force/EarthGravity.js.map +1 -1
  126. package/dist/force/Force.d.ts +1 -1
  127. package/dist/force/ForceModel.d.ts +1 -1
  128. package/dist/force/ForceModel.js +1 -1
  129. package/dist/force/ForceModel.js.map +1 -1
  130. package/dist/force/Gravity.d.ts +1 -1
  131. package/dist/force/Gravity.js +1 -1
  132. package/dist/force/Gravity.js.map +1 -1
  133. package/dist/force/SolarRadiationPressure.d.ts +1 -1
  134. package/dist/force/SolarRadiationPressure.js +1 -1
  135. package/dist/force/SolarRadiationPressure.js.map +1 -1
  136. package/dist/force/ThirdBodyGravity.d.ts +1 -1
  137. package/dist/force/ThirdBodyGravity.js +1 -1
  138. package/dist/force/ThirdBodyGravity.js.map +1 -1
  139. package/dist/force/Thrust.d.ts +1 -1
  140. package/dist/force/Thrust.js +1 -1
  141. package/dist/force/Thrust.js.map +1 -1
  142. package/dist/interfaces/BaseObjectParams.d.ts +31 -0
  143. package/dist/interfaces/BaseObjectParams.js +24 -0
  144. package/dist/interfaces/BaseObjectParams.js.map +1 -0
  145. package/dist/interfaces/ClassicalElementsParams.d.ts +33 -0
  146. package/dist/interfaces/ClassicalElementsParams.js +24 -0
  147. package/dist/interfaces/ClassicalElementsParams.js.map +1 -0
  148. package/dist/interfaces/EquinoctialElementsParams.d.ts +35 -0
  149. package/dist/interfaces/EquinoctialElementsParams.js +24 -0
  150. package/dist/interfaces/EquinoctialElementsParams.js.map +1 -0
  151. package/dist/interfaces/GroundPositionParams.d.ts +28 -0
  152. package/dist/interfaces/GroundPositionParams.js +24 -0
  153. package/dist/interfaces/GroundPositionParams.js.map +1 -0
  154. package/dist/interfaces/OmmFormat.d.ts +62 -0
  155. package/dist/interfaces/OmmFormat.js +2 -0
  156. package/dist/interfaces/OmmFormat.js.map +1 -0
  157. package/dist/interfaces/OptionsParams.d.ts +3 -0
  158. package/dist/interfaces/OptionsParams.js +2 -0
  159. package/dist/interfaces/OptionsParams.js.map +1 -0
  160. package/dist/interfaces/RfSensorParams.d.ts +1 -1
  161. package/dist/interfaces/SatelliteParams.d.ts +18 -0
  162. package/dist/interfaces/SatelliteParams.js +2 -0
  163. package/dist/interfaces/SatelliteParams.js.map +1 -0
  164. package/dist/interfaces/SensorParams.d.ts +38 -0
  165. package/dist/interfaces/SensorParams.js +2 -0
  166. package/dist/interfaces/SensorParams.js.map +1 -0
  167. package/dist/interfaces/StarObjectParams.d.ts +10 -0
  168. package/dist/interfaces/StarObjectParams.js +2 -0
  169. package/dist/interfaces/StarObjectParams.js.map +1 -0
  170. package/dist/interfaces/TimeVariables.d.ts +6 -0
  171. package/dist/interfaces/TimeVariables.js +2 -0
  172. package/dist/interfaces/TimeVariables.js.map +1 -0
  173. package/dist/interfaces/index.d.ts +8 -0
  174. package/dist/interpolator/ChebyshevCoefficients.d.ts +1 -1
  175. package/dist/interpolator/ChebyshevCoefficients.js +1 -1
  176. package/dist/interpolator/ChebyshevCoefficients.js.map +1 -1
  177. package/dist/interpolator/ChebyshevInterpolator.d.ts +1 -1
  178. package/dist/interpolator/ChebyshevInterpolator.js +1 -1
  179. package/dist/interpolator/ChebyshevInterpolator.js.map +1 -1
  180. package/dist/interpolator/CubicSpline.d.ts +1 -1
  181. package/dist/interpolator/CubicSplineInterpolator.d.ts +1 -1
  182. package/dist/interpolator/CubicSplineInterpolator.js +1 -1
  183. package/dist/interpolator/CubicSplineInterpolator.js.map +1 -1
  184. package/dist/interpolator/Interpolator.d.ts +1 -1
  185. package/dist/interpolator/Interpolator.js +1 -1
  186. package/dist/interpolator/Interpolator.js.map +1 -1
  187. package/dist/interpolator/LagrangeInterpolator.d.ts +1 -1
  188. package/dist/interpolator/LagrangeInterpolator.js +1 -1
  189. package/dist/interpolator/LagrangeInterpolator.js.map +1 -1
  190. package/dist/interpolator/StateInterpolator.d.ts +1 -1
  191. package/dist/interpolator/VerletBlendInterpolator.d.ts +1 -1
  192. package/dist/interpolator/VerletBlendInterpolator.js +1 -1
  193. package/dist/interpolator/VerletBlendInterpolator.js.map +1 -1
  194. package/dist/main.d.ts +11 -3
  195. package/dist/main.js +11 -3
  196. package/dist/main.js.map +1 -1
  197. package/dist/maneuver/TwoBurnOrbitTransfer.d.ts +1 -1
  198. package/dist/maneuver/TwoBurnOrbitTransfer.js +1 -1
  199. package/dist/maneuver/TwoBurnOrbitTransfer.js.map +1 -1
  200. package/dist/maneuver/Waypoint.d.ts +1 -1
  201. package/dist/maneuver/Waypoint.js +1 -1
  202. package/dist/maneuver/Waypoint.js.map +1 -1
  203. package/dist/objects/BaseObject.d.ts +74 -0
  204. package/dist/objects/BaseObject.js +151 -0
  205. package/dist/objects/BaseObject.js.map +1 -0
  206. package/dist/objects/DetailedSatellite.d.ts +3 -1
  207. package/dist/objects/DetailedSatellite.js +4 -2
  208. package/dist/objects/DetailedSatellite.js.map +1 -1
  209. package/dist/objects/DetailedSensor.d.ts +2 -1
  210. package/dist/objects/DetailedSensor.js +1 -1
  211. package/dist/objects/DetailedSensor.js.map +1 -1
  212. package/dist/objects/GroundObject.d.ts +85 -0
  213. package/dist/objects/GroundObject.js +143 -0
  214. package/dist/objects/GroundObject.js.map +1 -0
  215. package/dist/objects/LandObject.d.ts +2 -1
  216. package/dist/objects/LandObject.js +1 -1
  217. package/dist/objects/LandObject.js.map +1 -1
  218. package/dist/objects/Marker.d.ts +1 -1
  219. package/dist/objects/Marker.js +1 -1
  220. package/dist/objects/Marker.js.map +1 -1
  221. package/dist/objects/RfSensor.d.ts +1 -2
  222. package/dist/objects/RfSensor.js +1 -2
  223. package/dist/objects/RfSensor.js.map +1 -1
  224. package/dist/objects/Satellite.d.ts +226 -0
  225. package/dist/objects/Satellite.js +443 -0
  226. package/dist/objects/Satellite.js.map +1 -0
  227. package/dist/objects/Sensor.d.ts +100 -0
  228. package/dist/objects/Sensor.js +239 -0
  229. package/dist/objects/Sensor.js.map +1 -0
  230. package/dist/objects/Star.d.ts +36 -0
  231. package/dist/objects/Star.js +59 -0
  232. package/dist/objects/Star.js.map +1 -0
  233. package/dist/objects/index.d.ts +5 -0
  234. package/dist/objects/index.js +5 -0
  235. package/dist/objects/index.js.map +1 -1
  236. package/dist/observation/Observation.d.ts +1 -1
  237. package/dist/observation/ObservationOptical.d.ts +1 -1
  238. package/dist/observation/ObservationOptical.js +1 -1
  239. package/dist/observation/ObservationOptical.js.map +1 -1
  240. package/dist/observation/ObservationRadar.d.ts +1 -1
  241. package/dist/observation/ObservationRadar.js +1 -1
  242. package/dist/observation/ObservationRadar.js.map +1 -1
  243. package/dist/observation/ObservationUtils.d.ts +3 -1
  244. package/dist/observation/ObservationUtils.js +15 -1
  245. package/dist/observation/ObservationUtils.js.map +1 -1
  246. package/dist/observation/RAE.d.ts +111 -0
  247. package/dist/observation/RAE.js +215 -0
  248. package/dist/observation/RAE.js.map +1 -0
  249. package/dist/observation/RadecGeocentric.d.ts +111 -0
  250. package/dist/observation/RadecGeocentric.js +169 -0
  251. package/dist/observation/RadecGeocentric.js.map +1 -0
  252. package/dist/observation/RadecTopocentric.d.ts +123 -0
  253. package/dist/observation/RadecTopocentric.js +196 -0
  254. package/dist/observation/RadecTopocentric.js.map +1 -0
  255. package/dist/observation/index.d.ts +26 -0
  256. package/dist/observation/index.js +27 -0
  257. package/dist/observation/index.js.map +1 -0
  258. package/dist/operations/BoxMuller.d.ts +1 -1
  259. package/dist/operations/BoxMuller.js +1 -1
  260. package/dist/operations/BoxMuller.js.map +1 -1
  261. package/dist/operations/EulerAngles.d.ts +1 -1
  262. package/dist/operations/EulerAngles.js +1 -1
  263. package/dist/operations/EulerAngles.js.map +1 -1
  264. package/dist/operations/Matrix.d.ts +170 -0
  265. package/dist/operations/Matrix.js +405 -0
  266. package/dist/operations/Matrix.js.map +1 -0
  267. package/dist/operations/Quaternion.d.ts +1 -1
  268. package/dist/operations/Quaternion.js +1 -1
  269. package/dist/operations/Quaternion.js.map +1 -1
  270. package/dist/operations/Random.d.ts +40 -0
  271. package/dist/operations/Random.js +50 -0
  272. package/dist/operations/Random.js.map +1 -0
  273. package/dist/operations/RandomGaussianSource.d.ts +1 -1
  274. package/dist/operations/RandomGaussianSource.js +1 -1
  275. package/dist/operations/RandomGaussianSource.js.map +1 -1
  276. package/dist/operations/Vector.d.ts +262 -0
  277. package/dist/operations/Vector.js +415 -0
  278. package/dist/operations/Vector.js.map +1 -0
  279. package/dist/operations/Vector3D.d.ts +86 -0
  280. package/dist/operations/Vector3D.js +241 -0
  281. package/dist/operations/Vector3D.js.map +1 -0
  282. package/dist/operations/operations.d.ts +26 -0
  283. package/dist/operations/operations.js +27 -0
  284. package/dist/operations/operations.js.map +1 -0
  285. package/dist/optimize/ChebyshevCompressor.js +1 -1
  286. package/dist/optimize/ChebyshevCompressor.js.map +1 -1
  287. package/dist/optimize/PolynomialRegression.js +1 -1
  288. package/dist/optimize/PolynomialRegression.js.map +1 -1
  289. package/dist/optimize/SimplexEntry.js +1 -1
  290. package/dist/optimize/SimplexEntry.js.map +1 -1
  291. package/dist/orbit_determination/BatchLeastSquaresOD.d.ts +1 -1
  292. package/dist/orbit_determination/BatchLeastSquaresOD.js +1 -1
  293. package/dist/orbit_determination/BatchLeastSquaresOD.js.map +1 -1
  294. package/dist/orbit_determination/BatchLeastSquaresResult.d.ts +1 -1
  295. package/dist/orbit_determination/GibbsIOD.d.ts +1 -1
  296. package/dist/orbit_determination/GibbsIOD.js +1 -1
  297. package/dist/orbit_determination/GibbsIOD.js.map +1 -1
  298. package/dist/orbit_determination/GoodingIOD.d.ts +1 -1
  299. package/dist/orbit_determination/GoodingIOD.js +1 -1
  300. package/dist/orbit_determination/GoodingIOD.js.map +1 -1
  301. package/dist/orbit_determination/HerrickGibbsIOD.d.ts +1 -1
  302. package/dist/orbit_determination/HerrickGibbsIOD.js +1 -1
  303. package/dist/orbit_determination/HerrickGibbsIOD.js.map +1 -1
  304. package/dist/orbit_determination/LambertIOD.d.ts +1 -1
  305. package/dist/orbit_determination/LambertIOD.js +1 -1
  306. package/dist/orbit_determination/LambertIOD.js.map +1 -1
  307. package/dist/orbit_determination/ModifiedGoodingIOD.d.ts +1 -1
  308. package/dist/orbit_determination/ModifiedGoodingIOD.js +1 -1
  309. package/dist/orbit_determination/ModifiedGoodingIOD.js.map +1 -1
  310. package/dist/orbit_determination/index.d.ts +7 -0
  311. package/dist/orbit_determination/index.js +8 -0
  312. package/dist/orbit_determination/index.js.map +1 -0
  313. package/dist/propagator/KeplerPropagator.d.ts +1 -1
  314. package/dist/propagator/KeplerPropagator.js +1 -1
  315. package/dist/propagator/KeplerPropagator.js.map +1 -1
  316. package/dist/propagator/Propagator.d.ts +1 -1
  317. package/dist/propagator/Propagator.js +1 -1
  318. package/dist/propagator/Propagator.js.map +1 -1
  319. package/dist/propagator/RkCheckpoint.d.ts +1 -1
  320. package/dist/propagator/RkResult.d.ts +1 -1
  321. package/dist/propagator/RungeKutta4Propagator.d.ts +1 -1
  322. package/dist/propagator/RungeKutta4Propagator.js +1 -1
  323. package/dist/propagator/RungeKutta4Propagator.js.map +1 -1
  324. package/dist/propagator/RungeKuttaAdaptive.d.ts +1 -1
  325. package/dist/propagator/RungeKuttaAdaptive.js +1 -1
  326. package/dist/propagator/RungeKuttaAdaptive.js.map +1 -1
  327. package/dist/propagator/Sgp4Propagator.d.ts +1 -1
  328. package/dist/sgp4/index.d.ts +23 -0
  329. package/dist/sgp4/index.js +24 -0
  330. package/dist/sgp4/index.js.map +1 -0
  331. package/dist/sgp4/sgp4-error.d.ts +22 -0
  332. package/dist/sgp4/sgp4-error.js +44 -0
  333. package/dist/sgp4/sgp4-error.js.map +1 -0
  334. package/dist/sgp4/sgp4.d.ts +102 -0
  335. package/dist/sgp4/sgp4.js +3167 -0
  336. package/dist/sgp4/sgp4.js.map +1 -0
  337. package/dist/smoothing/ExponentialSmoothing.d.ts +1 -1
  338. package/dist/time/Epoch.d.ts +44 -0
  339. package/dist/time/Epoch.js +109 -0
  340. package/dist/time/Epoch.js.map +1 -0
  341. package/dist/time/EpochGPS.d.ts +42 -0
  342. package/dist/time/EpochGPS.js +70 -0
  343. package/dist/time/EpochGPS.js.map +1 -0
  344. package/dist/time/EpochTAI.d.ts +26 -0
  345. package/dist/time/EpochTAI.js +27 -0
  346. package/dist/time/EpochTAI.js.map +1 -0
  347. package/dist/time/EpochTDB.d.ts +26 -0
  348. package/dist/time/EpochTDB.js +27 -0
  349. package/dist/time/EpochTDB.js.map +1 -0
  350. package/dist/time/EpochTT.d.ts +26 -0
  351. package/dist/time/EpochTT.js +27 -0
  352. package/dist/time/EpochTT.js.map +1 -0
  353. package/dist/time/EpochUTC.d.ts +59 -0
  354. package/dist/time/EpochUTC.js +137 -0
  355. package/dist/time/EpochUTC.js.map +1 -0
  356. package/dist/time/EpochWindow.d.ts +28 -0
  357. package/dist/time/EpochWindow.js +31 -0
  358. package/dist/time/EpochWindow.js.map +1 -0
  359. package/dist/time/TimeStamped.d.ts +43 -0
  360. package/dist/time/TimeStamped.js +46 -0
  361. package/dist/time/TimeStamped.js.map +1 -0
  362. package/dist/time/index.d.ts +30 -0
  363. package/dist/time/index.js +31 -0
  364. package/dist/time/index.js.map +1 -0
  365. package/dist/transforms/TransformCache.d.ts +27 -0
  366. package/dist/transforms/TransformCache.js +41 -0
  367. package/dist/transforms/TransformCache.js.map +1 -0
  368. package/dist/transforms/conversions.d.ts +63 -0
  369. package/dist/transforms/conversions.js +88 -0
  370. package/dist/transforms/conversions.js.map +1 -0
  371. package/dist/transforms/index.d.ts +1 -0
  372. package/dist/transforms/index.js +1 -0
  373. package/dist/transforms/index.js.map +1 -1
  374. package/dist/transforms/transforms.d.ts +166 -2
  375. package/dist/transforms/transforms.js +372 -1
  376. package/dist/transforms/transforms.js.map +1 -1
  377. package/dist/types/types.d.ts +674 -2
  378. package/dist/types/types.js +36 -0
  379. package/dist/types/types.js.map +1 -1
  380. package/dist/utils/constants.d.ts +80 -0
  381. package/dist/utils/constants.js +87 -0
  382. package/dist/utils/constants.js.map +1 -0
  383. package/dist/utils/functions.d.ts +228 -0
  384. package/dist/utils/functions.js +476 -0
  385. package/dist/utils/functions.js.map +1 -1
  386. package/dist/utils/index.d.ts +3 -1
  387. package/dist/utils/index.js +3 -1
  388. package/dist/utils/index.js.map +1 -1
  389. package/dist/utils/jacobian.d.ts +1 -1
  390. package/dist/utils/jacobian.js +1 -1
  391. package/dist/utils/jacobian.js.map +1 -1
  392. package/dist/utils/linearDistance.d.ts +8 -0
  393. package/dist/utils/linearDistance.js +10 -0
  394. package/dist/utils/linearDistance.js.map +1 -0
  395. package/package.json +4 -7
  396. package/src/body/Celestial.ts +134 -0
  397. package/src/body/Earth.ts +260 -0
  398. package/src/body/Moon.ts +556 -0
  399. package/src/body/NutationAngles.ts +40 -0
  400. package/src/body/PrecessionAngles.ts +31 -0
  401. package/src/body/Sun.ts +669 -0
  402. package/src/body/index.ts +27 -0
  403. package/src/body/suncalc.LICENSE.md +18 -0
  404. package/src/coordinate/ClassicalElements.ts +326 -0
  405. package/src/coordinate/EquinoctialElements.ts +189 -0
  406. package/src/coordinate/FormatTle.ts +214 -0
  407. package/src/coordinate/Geodetic.ts +186 -0
  408. package/src/coordinate/Hill.ts +1 -1
  409. package/src/coordinate/ITRF.ts +146 -0
  410. package/src/coordinate/J2000.ts +130 -0
  411. package/src/coordinate/RIC.ts +87 -0
  412. package/src/coordinate/RelativeState.ts +101 -0
  413. package/src/coordinate/StateVector.ts +122 -0
  414. package/src/coordinate/TEME.ts +97 -0
  415. package/src/coordinate/Tle.ts +1024 -0
  416. package/src/coordinate/index.ts +12 -0
  417. package/src/coordinate/tle-format-data.ts +47 -0
  418. package/src/covariance/CovarianceSample.ts +1 -1
  419. package/src/covariance/StateCovariance.ts +1 -1
  420. package/src/data/DataHandler.ts +88 -0
  421. package/src/data/values/Egm96Data.ts +75 -0
  422. package/src/data/values/HpAtmosphereData.ts +76 -0
  423. package/src/data/values/HpAtmosphereResult.ts +41 -0
  424. package/src/data/values/Iau1980Data.ts +63 -0
  425. package/src/data/values/LeapSecond.ts +37 -0
  426. package/src/data/values/LeapSecondData.ts +113 -0
  427. package/src/data/values/egm96.ts +728 -0
  428. package/src/data/values/hpAtmosphere.ts +79 -0
  429. package/src/data/values/iau1980.ts +32 -0
  430. package/src/enums/AngularDiameterMethod.ts +28 -0
  431. package/src/enums/AngularDistanceMethod.ts +28 -0
  432. package/src/enums/OrbitRegime.ts +31 -0
  433. package/src/enums/PassType.ts +29 -0
  434. package/src/enums/Sgp4OpsMode.ts +27 -0
  435. package/src/enums/index.ts +5 -0
  436. package/src/force/AtmosphericDrag.ts +1 -1
  437. package/src/force/EarthGravity.ts +1 -1
  438. package/src/force/Force.ts +1 -1
  439. package/src/force/ForceModel.ts +1 -1
  440. package/src/force/Gravity.ts +1 -1
  441. package/src/force/SolarRadiationPressure.ts +1 -1
  442. package/src/force/ThirdBodyGravity.ts +1 -1
  443. package/src/force/Thrust.ts +1 -1
  444. package/src/interfaces/BaseObjectParams.ts +33 -0
  445. package/src/interfaces/ClassicalElementsParams.ts +35 -0
  446. package/src/interfaces/EquinoctialElementsParams.ts +37 -0
  447. package/src/interfaces/GroundPositionParams.ts +30 -0
  448. package/src/interfaces/OmmFormat.ts +63 -0
  449. package/src/interfaces/OptionsParams.ts +3 -0
  450. package/src/interfaces/RfSensorParams.ts +1 -1
  451. package/src/interfaces/SatelliteParams.ts +20 -0
  452. package/src/interfaces/SensorParams.ts +39 -0
  453. package/src/interfaces/StarObjectParams.ts +11 -0
  454. package/src/interfaces/TimeVariables.ts +7 -0
  455. package/src/interfaces/index.ts +8 -0
  456. package/src/interpolator/ChebyshevCoefficients.ts +1 -1
  457. package/src/interpolator/ChebyshevInterpolator.ts +1 -1
  458. package/src/interpolator/CubicSpline.ts +1 -1
  459. package/src/interpolator/CubicSplineInterpolator.ts +1 -1
  460. package/src/interpolator/Interpolator.ts +1 -1
  461. package/src/interpolator/LagrangeInterpolator.ts +1 -1
  462. package/src/interpolator/StateInterpolator.ts +1 -1
  463. package/src/interpolator/VerletBlendInterpolator.ts +1 -1
  464. package/src/main.ts +11 -3
  465. package/src/maneuver/TwoBurnOrbitTransfer.ts +1 -1
  466. package/src/maneuver/Waypoint.ts +1 -1
  467. package/src/objects/BaseObject.ts +171 -0
  468. package/src/objects/DetailedSatellite.ts +5 -3
  469. package/src/objects/DetailedSensor.ts +2 -1
  470. package/src/objects/GroundObject.ts +176 -0
  471. package/src/objects/LandObject.ts +2 -1
  472. package/src/objects/Marker.ts +1 -1
  473. package/src/objects/RfSensor.ts +1 -2
  474. package/src/objects/Satellite.ts +552 -0
  475. package/src/objects/Sensor.ts +280 -0
  476. package/src/objects/Star.ts +96 -0
  477. package/src/objects/index.ts +5 -0
  478. package/src/observation/Observation.ts +1 -1
  479. package/src/observation/ObservationOptical.ts +1 -1
  480. package/src/observation/ObservationRadar.ts +1 -1
  481. package/src/observation/ObservationUtils.ts +30 -1
  482. package/src/observation/RAE.ts +262 -0
  483. package/src/observation/RadecGeocentric.ts +206 -0
  484. package/src/observation/RadecTopocentric.ts +241 -0
  485. package/src/observation/index.ts +27 -0
  486. package/src/operations/BoxMuller.ts +1 -1
  487. package/src/operations/EulerAngles.ts +1 -1
  488. package/src/operations/Matrix.ts +473 -0
  489. package/src/operations/Quaternion.ts +1 -1
  490. package/src/operations/Random.ts +54 -0
  491. package/src/operations/RandomGaussianSource.ts +1 -1
  492. package/src/operations/Vector.ts +484 -0
  493. package/src/operations/Vector3D.ts +289 -0
  494. package/src/operations/operations.ts +27 -0
  495. package/src/optimize/ChebyshevCompressor.ts +1 -1
  496. package/src/optimize/PolynomialRegression.ts +1 -1
  497. package/src/optimize/SimplexEntry.ts +1 -1
  498. package/src/orbit_determination/BatchLeastSquaresOD.ts +1 -1
  499. package/src/orbit_determination/BatchLeastSquaresResult.ts +1 -1
  500. package/src/orbit_determination/GibbsIOD.ts +3 -1
  501. package/src/orbit_determination/GoodingIOD.ts +1 -1
  502. package/src/orbit_determination/HerrickGibbsIOD.ts +1 -1
  503. package/src/orbit_determination/LambertIOD.ts +1 -1
  504. package/src/orbit_determination/ModifiedGoodingIOD.ts +1 -1
  505. package/src/orbit_determination/index.ts +7 -0
  506. package/src/propagator/KeplerPropagator.ts +1 -1
  507. package/src/propagator/Propagator.ts +1 -1
  508. package/src/propagator/RkCheckpoint.ts +1 -1
  509. package/src/propagator/RkResult.ts +1 -1
  510. package/src/propagator/RungeKutta4Propagator.ts +1 -1
  511. package/src/propagator/RungeKuttaAdaptive.ts +1 -1
  512. package/src/propagator/Sgp4Propagator.ts +1 -1
  513. package/src/sgp4/index.ts +24 -0
  514. package/src/sgp4/sgp4-error.ts +53 -0
  515. package/src/sgp4/sgp4.LICENSE.md +28 -0
  516. package/src/sgp4/sgp4.ts +3986 -0
  517. package/src/smoothing/ExponentialSmoothing.ts +1 -1
  518. package/src/time/Epoch.ts +128 -0
  519. package/src/time/EpochGPS.ts +76 -0
  520. package/src/time/EpochTAI.ts +27 -0
  521. package/src/time/EpochTDB.ts +27 -0
  522. package/src/time/EpochTT.ts +27 -0
  523. package/src/time/EpochUTC.ts +188 -0
  524. package/src/time/EpochWindow.ts +33 -0
  525. package/src/time/TimeStamped.ts +50 -0
  526. package/src/time/index.ts +31 -0
  527. package/src/transforms/TransformCache.ts +46 -0
  528. package/src/transforms/conversions.ts +98 -0
  529. package/src/transforms/index.ts +1 -0
  530. package/src/transforms/transforms.ts +478 -2
  531. package/src/types/types.ts +721 -2
  532. package/src/utils/constants.ts +113 -0
  533. package/src/utils/functions.ts +562 -0
  534. package/src/utils/index.ts +3 -1
  535. package/src/utils/jacobian.ts +1 -1
  536. package/src/utils/linearDistance.ts +11 -0
@@ -0,0 +1,113 @@
1
+ import { Days, Degrees, Milliseconds, Minutes, Radians, Seconds } from '../types/types.js';
2
+
3
+ /**
4
+ * Full circle in radians (PI * 2)
5
+ *
6
+ * https://tauday.com/tau-manifesto
7
+ */
8
+ export const TAU = (2.0 * Math.PI) as Radians;
9
+
10
+ /**
11
+ * Represents half of the mathematical constant PI.
12
+ */
13
+ export const halfPi = (0.5 * Math.PI) as Radians;
14
+
15
+ /**
16
+ * Converts degrees to radians.
17
+ */
18
+ export const DEG2RAD = (Math.PI / 180.0) as Radians;
19
+
20
+ /**
21
+ * Converts radians to degrees.
22
+ */
23
+ export const RAD2DEG = (180.0 / Math.PI) as Degrees;
24
+
25
+ /**
26
+ * Conversion factor from seconds to degrees.
27
+ */
28
+ export const sec2deg = (1.0 / 60.0 / 60.0) as Degrees;
29
+
30
+ /**
31
+ * Conversion factor from seconds to days.
32
+ */
33
+ export const sec2day: number = sec2deg / 24.0;
34
+
35
+ /**
36
+ * Conversion factor from arcseconds to radians.
37
+ */
38
+ export const asec2rad = (sec2deg * DEG2RAD) as Radians;
39
+
40
+ /**
41
+ * Convert ten-thousandths of an arcsecond to radians.
42
+ */
43
+ export const ttasec2rad = (asec2rad / 10000.0) as Radians;
44
+
45
+ /**
46
+ * Convert milliarcseconds to radians.
47
+ */
48
+ export const masec2rad = (asec2rad / 1000.0) as Radians;
49
+
50
+ /**
51
+ * The angular velocity of the Earth in radians per second.
52
+ */
53
+ export const angularVelocityOfEarth = 7.292115e-5;
54
+
55
+ /**
56
+ * Astronomical unit in kilometers.
57
+ */
58
+ export const astronomicalUnit = 149597870.0;
59
+
60
+ // / Convert milliseconds to seconds.
61
+ export const msec2sec = 1e-3 as Seconds;
62
+
63
+ // / Speed of light.
64
+ export const cMPerSec = 299792458;
65
+ export const cKmPerSec = 299792458 / 1000;
66
+ export const cKmPerMs = 299792458 / 1000 / 1000;
67
+
68
+ // / Milliseconds per day.
69
+ export const MS_PER_DAY = 86400000;
70
+
71
+ // / Seconds per day.
72
+ export const secondsPerDay = 86400.0;
73
+
74
+ // / Convert seconds to minutes.
75
+ export const sec2min = (1.0 / 60.0) as Minutes;
76
+
77
+ // / Seconds per sidereal day.
78
+ export const secondsPerSiderealDay = 86164.0905;
79
+
80
+ // / Seconds per week.
81
+ export const secondsPerWeek: number = secondsPerDay * 7.0;
82
+
83
+ /**
84
+ * Half the number of radians in a circle.
85
+ */
86
+ export const PI = Math.PI as Radians;
87
+
88
+ export const x2o3 = 2.0 / 3.0;
89
+ export const temp4 = 1.5e-12;
90
+
91
+ /**
92
+ * The number of minutes in a day.
93
+ */
94
+ export const MINUTES_PER_DAY = 1440 as Minutes;
95
+
96
+ /**
97
+ * The number of milliseconds in a day.
98
+ */
99
+ export const MILLISECONDS_TO_DAYS = 1.15741e-8;
100
+
101
+ /**
102
+ * The number of milliseconds in a day.
103
+ */
104
+ export const MILLISECONDS_PER_DAY = <Days>1000 * 60 * 60 * 24;
105
+
106
+ /**
107
+ * The number of milliseconds in a second.
108
+ */
109
+ export const MILLISECONDS_PER_SECOND = <Milliseconds>1000;
110
+
111
+ export const RADIUS_OF_EARTH = 6371; // Radius of Earth in kilometers
112
+
113
+ export const earthGravityParam = 398600.4415;
@@ -1,4 +1,566 @@
1
1
  import { DifferentiableFunction } from '../main.js';
2
+ /* eslint-disable require-jsdoc */
3
+ import { AngularDiameterMethod } from '../enums/AngularDiameterMethod.js';
4
+ import { AngularDistanceMethod } from '../enums/AngularDistanceMethod.js';
5
+ import { EcfVec3, Kilometers, KilometersPerSecond, Radians, SpaceObjectType } from '../types/types.js';
6
+ import { angularVelocityOfEarth, cKmPerSec } from './constants.js';
7
+
8
+ /**
9
+ * Calculates the factorial of a given number.
10
+ * @param n - The number to calculate the factorial for.
11
+ * @returns The factorial of the given number.
12
+ */
13
+ export function factorial(n: number): number {
14
+ const nAbs = Math.abs(n);
15
+ let result = 1;
16
+
17
+ for (let i = 2; i <= nAbs; i++) {
18
+ result *= i;
19
+ }
20
+
21
+ return result;
22
+ }
23
+
24
+ /**
25
+ * Calculates the base 10 logarithm of a number.
26
+ * @param x - The number to calculate the logarithm for.
27
+ * @returns The base 10 logarithm of the input number.
28
+ */
29
+ export function log10(x: number): number {
30
+ return Math.log(x) / Math.LN10;
31
+ }
32
+
33
+ /**
34
+ * Calculates the hyperbolic secant of a number.
35
+ * @param x - The number to calculate the hyperbolic secant of.
36
+ * @returns The hyperbolic secant of the given number.
37
+ */
38
+ export function sech(x: number): number {
39
+ return 1 / Math.cosh(x);
40
+ }
41
+
42
+ /**
43
+ * Calculates the hyperbolic cosecant of a number.
44
+ * @param x - The number for which to calculate the hyperbolic cosecant.
45
+ * @returns The hyperbolic cosecant of the given number.
46
+ */
47
+ export function csch(x: number): number {
48
+ return 1 / Math.sinh(x);
49
+ }
50
+
51
+ /**
52
+ * Returns the inverse hyperbolic cosecant of a number.
53
+ * @param x - The number to calculate the inverse hyperbolic cosecant of.
54
+ * @returns The inverse hyperbolic cosecant of the given number.
55
+ */
56
+ export function acsch(x: number): number {
57
+ return Math.log(1 / x + Math.sqrt(1 / (x * x) + 1));
58
+ }
59
+
60
+ /**
61
+ * Calculates the inverse hyperbolic secant (asech) of a number.
62
+ * @param x - The number to calculate the inverse hyperbolic secant of.
63
+ * @returns The inverse hyperbolic secant of the given number.
64
+ */
65
+ export function asech(x: number): number {
66
+ return Math.log(1 / x + Math.sqrt(1 / (x * x) - 1));
67
+ }
68
+
69
+ /**
70
+ * Calculates the inverse hyperbolic cotangent (acoth) of a number.
71
+ * @param x - The number to calculate the acoth of.
72
+ * @returns The inverse hyperbolic cotangent of the given number.
73
+ */
74
+ export function acoth(x: number): number {
75
+ return 0.5 * Math.log((x + 1) / (x - 1));
76
+ }
77
+
78
+ /**
79
+ * Copies the sign of the second number to the first number.
80
+ * @param mag - The magnitude of the number.
81
+ * @param sgn - The sign of the number.
82
+ * @returns The number with the magnitude of `mag` and the sign of `sgn`.
83
+ */
84
+ export function copySign(mag: number, sgn: number): number {
85
+ return Math.abs(mag) * Math.sign(sgn);
86
+ }
87
+
88
+ /**
89
+ * Evaluates a polynomial function at a given value.
90
+ * @param x - The value at which to evaluate the polynomial.
91
+ * @param coeffs - The coefficients of the polynomial.
92
+ * @returns The result of evaluating the polynomial at the given value.
93
+ */
94
+ export function evalPoly(x: number, coeffs: Float64Array): number {
95
+ let result: number = coeffs[0] as number;
96
+
97
+ for (let i = 1; i < coeffs.length; i++) {
98
+ result = result * x + coeffs[i]!;
99
+ }
100
+
101
+ return result;
102
+ }
103
+
104
+ /**
105
+ * Concatenates two Float64Arrays into a new Float64Array.
106
+ * @param a - The first Float64Array.
107
+ * @param b - The second Float64Array.
108
+ * @returns A new Float64Array containing the concatenated values of `a` and `b`.
109
+ */
110
+ export function concat(a: Float64Array, b: Float64Array): Float64Array {
111
+ const result = new Float64Array(a.length + b.length);
112
+
113
+ result.set(a);
114
+ result.set(b, a.length);
115
+
116
+ return result;
117
+ }
118
+
119
+ /**
120
+ * Calculates the angle in the half-plane that best matches the given angle.
121
+ * @param angle - The angle to be matched.
122
+ * @param match - The angle to be matched against.
123
+ * @returns The angle in the half-plane that best matches the given angle.
124
+ */
125
+ export function matchHalfPlane(angle: number, match: number): number {
126
+ const a1 = angle;
127
+ const a2 = 2 * Math.PI - angle;
128
+ const d1 = Math.atan2(Math.sin(a1 - match), Math.cos(a1 - match));
129
+ const d2 = Math.atan2(Math.sin(a2 - match), Math.cos(a2 - match));
130
+
131
+ return Math.abs(d1) < Math.abs(d2) ? a1 : a2;
132
+ }
133
+
134
+ /**
135
+ * Wraps an angle to the range [-π, π].
136
+ * @param theta - The angle to wrap.
137
+ * @returns The wrapped angle.
138
+ */
139
+ export function wrapAngle(theta: Radians): Radians {
140
+ const result = ((theta + Math.PI) % (2 * Math.PI)) - Math.PI;
141
+
142
+ if (result === -Math.PI) {
143
+ return Math.PI as Radians;
144
+ }
145
+
146
+ return result as Radians;
147
+ }
148
+
149
+ /**
150
+ * Calculates the angular distance between two points on a sphere using the cosine formula.
151
+ * @param lam1 - The longitude of the first point in radians.
152
+ * @param phi1 - The latitude of the first point in radians.
153
+ * @param lam2 - The longitude of the second point in radians.
154
+ * @param phi2 - The latitude of the second point in radians.
155
+ * @returns The angular distance between the two points in radians.
156
+ */
157
+ function angularDistanceCosine_(lam1: number, phi1: number, lam2: number, phi2: number): Radians {
158
+ const a = Math.sin(phi1) * Math.sin(phi2);
159
+ const b = Math.cos(phi1) * Math.cos(phi2) * Math.cos(lam2 - lam1);
160
+
161
+ return Math.acos(a + b) as Radians;
162
+ }
163
+
164
+ /**
165
+ * Calculates the angular distance between two points on a sphere using the Haversine formula.
166
+ * @param lam1 - The longitude of the first point in radians.
167
+ * @param phi1 - The latitude of the first point in radians.
168
+ * @param lam2 - The longitude of the second point in radians.
169
+ * @param phi2 - The latitude of the second point in radians.
170
+ * @returns The angular distance between the two points in radians.
171
+ */
172
+ function angularDistanceHaversine_(lam1: number, phi1: number, lam2: number, phi2: number): Radians {
173
+ const dlam = lam2 - lam1;
174
+ const dphi = phi2 - phi1;
175
+ const sdlam = Math.sin(0.5 * dlam);
176
+ const sdphi = Math.sin(0.5 * dphi);
177
+ const a = sdphi * sdphi + Math.cos(phi1) * Math.cos(phi2) * sdlam * sdlam;
178
+
179
+ return 2.0 * Math.asin(Math.min(1.0, Math.sqrt(a))) as Radians;
180
+ }
181
+
182
+ /**
183
+ * Calculates the angular distance between two points on a sphere.
184
+ * @param lam1 The longitude of the first point.
185
+ * @param phi1 The latitude of the first point.
186
+ * @param lam2 The longitude of the second point.
187
+ * @param phi2 The latitude of the second point.
188
+ * @param method The method to use for calculating the angular distance. Defaults to AngularDistanceMethod.Cosine.
189
+ * @returns The angular distance between the two points.
190
+ * @throws Error if an invalid angular distance method is provided.
191
+ */
192
+ export function angularDistance(
193
+ lam1: number,
194
+ phi1: number,
195
+ lam2: number,
196
+ phi2: number,
197
+ method: AngularDistanceMethod = AngularDistanceMethod.Cosine,
198
+ ): Radians {
199
+ switch (method) {
200
+ case AngularDistanceMethod.Cosine:
201
+ return angularDistanceCosine_(lam1, phi1, lam2, phi2);
202
+ case AngularDistanceMethod.Haversine:
203
+ return angularDistanceHaversine_(lam1, phi1, lam2, phi2);
204
+ default:
205
+ throw new Error('Invalid angular distance method.');
206
+ }
207
+ }
208
+
209
+ /**
210
+ * Calculates the angular diameter of an object.
211
+ * @param diameter - The diameter of the object.
212
+ * @param distance - The distance to the object.
213
+ * @param method - The method used to calculate the angular diameter. Defaults to AngularDiameterMethod.Sphere.
214
+ * @returns The angular diameter of the object.
215
+ * @throws Error if an invalid angular diameter method is provided.
216
+ */
217
+ export function angularDiameter(
218
+ diameter: number,
219
+ distance: number,
220
+ method: AngularDiameterMethod = AngularDiameterMethod.Sphere,
221
+ ): number {
222
+ switch (method) {
223
+ case AngularDiameterMethod.Circle:
224
+ return 2 * Math.atan(diameter / (2 * distance));
225
+ case AngularDiameterMethod.Sphere:
226
+ return 2 * Math.asin(diameter / (2 * distance));
227
+ default:
228
+ throw new Error('Invalid angular diameter method.');
229
+ }
230
+ }
231
+
232
+ /**
233
+ * Performs linear interpolation between two points.
234
+ * @param x - The x-coordinate to interpolate.
235
+ * @param x0 - The x-coordinate of the first point.
236
+ * @param y0 - The y-coordinate of the first point.
237
+ * @param x1 - The x-coordinate of the second point.
238
+ * @param y1 - The y-coordinate of the second point.
239
+ * @returns The interpolated y-coordinate corresponding to the given x-coordinate.
240
+ */
241
+ export function linearInterpolate(x: number, x0: number, y0: number, x1: number, y1: number): number {
242
+ return (y0 * (x1 - x) + y1 * (x - x0)) / (x1 - x0);
243
+ }
244
+
245
+ /**
246
+ * Calculates the mean value of an array of numbers.
247
+ * @param values - The array of numbers.
248
+ * @returns The mean value of the numbers.
249
+ */
250
+ export function mean(values: number[]): number {
251
+ const n = values.length;
252
+ let sum = 0.0;
253
+
254
+ for (const v of values) {
255
+ sum += v;
256
+ }
257
+
258
+ return sum / n;
259
+ }
260
+
261
+ /**
262
+ * Calculates the standard deviation of an array of numbers.
263
+ * @param values - The array of numbers.
264
+ * @param isSample - Optional. Specifies whether the array represents a sample. Default is false.
265
+ * @returns The standard deviation of the array.
266
+ */
267
+ export function std(values: number[], isSample = false): number {
268
+ const mu = mean(values);
269
+ const n = values.length;
270
+ let sum = 0.0;
271
+
272
+ for (const v of values) {
273
+ const sub = v - mu;
274
+
275
+ sum += sub * sub;
276
+ }
277
+ const m = isSample ? 1 : 0;
278
+
279
+ return Math.sqrt((1.0 / (n - m)) * sum);
280
+ }
281
+
282
+ /**
283
+ * Calculates the covariance between two arrays.
284
+ * @param a - The first array.
285
+ * @param b - The second array.
286
+ * @param isSample - Optional. Specifies whether the arrays represent a sample. Default is false.
287
+ * @returns The covariance between the two arrays.
288
+ */
289
+ export function covariance(a: number[], b: number[], isSample = false): number {
290
+ const n = a.length;
291
+ const am = mean(a);
292
+ const bm = mean(b);
293
+ let result = 0.0;
294
+
295
+ for (let i = 0; i < n; i++) {
296
+ result += (a[i]! - am) * (b[i]! - bm);
297
+ }
298
+ const m = isSample ? 1 : 0;
299
+
300
+ return result / (n - m);
301
+ }
302
+
303
+ /**
304
+ * Calculates the gamma function of a number.
305
+ * @param n - The input number.
306
+ * @returns The gamma function value.
307
+ */
308
+ export function gamma(n: number): number {
309
+ return factorial(n - 1);
310
+ }
311
+
312
+ /**
313
+ * Calculates the eccentric anomaly (e0) and true anomaly (nu) using Newton's method
314
+ * for a given eccentricity (ecc) and mean anomaly (m).
315
+ * @param ecc - The eccentricity of the orbit.
316
+ * @param m - The mean anomaly.
317
+ * @returns An object containing the eccentric anomaly (e0) and true anomaly (nu).
318
+ */
319
+ export function newtonM(ecc: number, m: number): { e0: number; nu: number } {
320
+ const numiter = 50;
321
+ const small = 1e-8;
322
+ let e0;
323
+ let nu;
324
+
325
+ if (ecc > small) {
326
+ if ((m < 0.0 && m > -Math.PI) || m > Math.PI) {
327
+ e0 = m - ecc;
328
+ } else {
329
+ e0 = m + ecc;
330
+ }
331
+ let ktr = 1;
332
+ let e1 = e0 + (m - e0 + ecc * Math.sin(e0)) / (1.0 - ecc * Math.cos(e0));
333
+
334
+ while (Math.abs(e1 - e0) > small && ktr <= numiter) {
335
+ ktr++;
336
+ e0 = e1;
337
+ e1 = e0 + (m - e0 + ecc * Math.sin(e0)) / (1.0 - ecc * Math.cos(e0));
338
+ }
339
+ const sinv = (Math.sqrt(1.0 - ecc * ecc) * Math.sin(e1)) / (1.0 - ecc * Math.cos(e1));
340
+ const cosv = (Math.cos(e1) - ecc) / (1.0 - ecc * Math.cos(e1));
341
+
342
+ nu = Math.atan2(sinv, cosv);
343
+ } else {
344
+ nu = m;
345
+ e0 = m;
346
+ }
347
+
348
+ return { e0, nu };
349
+ }
350
+
351
+ /**
352
+ * Calculates the eccentric anomaly (e0) and mean anomaly (m) using Newton's method
353
+ * for a given eccentricity (ecc) and true anomaly (nu).
354
+ * @param ecc - The eccentricity of the orbit.
355
+ * @param nu - The true anomaly.
356
+ * @returns An object containing the calculated eccentric anomaly (e0) and mean anomaly (m).
357
+ */
358
+ export function newtonNu(ecc: number, nu: number): { e0: number; m: Radians } {
359
+ const small = 1e-8;
360
+ let e0 = 0.0;
361
+ let m = 0.0;
362
+
363
+ if (Math.abs(ecc) < small) {
364
+ m = nu;
365
+ e0 = nu;
366
+ } else if (ecc < 1.0 - small) {
367
+ const sine = (Math.sqrt(1.0 - ecc * ecc) * Math.sin(nu)) / (1.0 + ecc * Math.cos(nu));
368
+ const cose = (ecc + Math.cos(nu)) / (1.0 + ecc * Math.cos(nu));
369
+
370
+ e0 = Math.atan2(sine, cose);
371
+ m = e0 - ecc * Math.sin(e0);
372
+ }
373
+ if (ecc < 1.0) {
374
+ m -= Math.floor(m / (2 * Math.PI)) * (2 * Math.PI);
375
+ if (m < 0.0) {
376
+ m += 2.0 * Math.PI;
377
+ }
378
+ e0 -= Math.floor(e0 / (2 * Math.PI)) * (2 * Math.PI);
379
+ }
380
+
381
+ return { e0, m: m as Radians };
382
+ }
383
+
384
+ /**
385
+ * Creates a 2D array with the specified number of rows and columns, filled with the same given value.
386
+ * @template T The type of elements in the array.
387
+ * @param rows The number of rows in the 2D array.
388
+ * @param columns The number of columns in the 2D array.
389
+ * @param value The value to fill the array with.
390
+ * @returns The 2D array with the specified number of rows and columns, filled with the given value.
391
+ */
392
+ export function array2d<T>(rows: number, columns: number, value: T): T[][] {
393
+ const output: T[][] = [];
394
+
395
+ for (let i = 0; i < rows; i++) {
396
+ output.push(Array(columns).fill(value));
397
+ }
398
+
399
+ return output;
400
+ }
401
+
402
+ /**
403
+ * Clamps a number between a minimum and maximum value.
404
+ * @param x The number to clamp.
405
+ * @param min The minimum value.
406
+ * @param max The maximum value.
407
+ * @returns The clamped number.
408
+ */
409
+ export function clamp(x: number, min: number, max: number): number {
410
+ return Math.max(min, Math.min(x, max));
411
+ }
412
+
413
+ /**
414
+ * Determines whether a given year is a leap year.
415
+ * @param dateIn The date to check.
416
+ * @returns `true` if the year is a leap year, `false` otherwise.
417
+ */
418
+ export function isLeapYear(dateIn: Date): boolean {
419
+ const year = dateIn.getUTCFullYear();
420
+
421
+ if ((year & 3) !== 0) {
422
+ return false;
423
+ }
424
+
425
+ return year % 100 !== 0 || year % 400 === 0;
426
+ }
427
+
428
+ /**
429
+ * An array of the day of the year for each month.
430
+ */
431
+ type MonthDaysArray = [number, number, number, number, number, number, number, number, number, number, number, number];
432
+
433
+ /**
434
+ * Calculates the day of the year for a given date.
435
+ * If no date is provided, the current date is used.
436
+ *
437
+ * This is sometimes referred to as the Jday, but is
438
+ * very different from the Julian day used in astronomy.
439
+ * @param date - The date for which to calculate the day of the year.
440
+ * @returns The day of the year as a number.
441
+ */
442
+ export function getDayOfYear(date = new Date()): number {
443
+ const dayCount = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334] as MonthDaysArray;
444
+ const mn = date.getUTCMonth() as 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11;
445
+ const dn = date.getUTCDate();
446
+ let dayOfYear = dayCount[mn] + dn;
447
+
448
+ if (mn > 1 && isLeapYear(date)) {
449
+ dayOfYear++;
450
+ }
451
+
452
+ return dayOfYear;
453
+ }
454
+
455
+ /**
456
+ * Rounds a number to a specified number of decimal places.
457
+ * @param value - The number to round.
458
+ * @param places - The number of decimal places to round to.
459
+ * @returns The rounded number.
460
+ */
461
+ export function toPrecision(value: number, places: number): number {
462
+ return Number(value.toFixed(places));
463
+ }
464
+
465
+ /**
466
+ * Returns the sign of a number.
467
+ * @param value - The number to determine the sign of.
468
+ * @returns 1 if the number is positive, -1 if the number is negative.
469
+ */
470
+ export function sign(value: number) {
471
+ return value >= 0 ? 1 : -1;
472
+ }
473
+
474
+ const spaceObjTypeStrMap_ = {
475
+ [SpaceObjectType.UNKNOWN]: 'Unknown',
476
+ [SpaceObjectType.PAYLOAD]: 'Payload',
477
+ [SpaceObjectType.ROCKET_BODY]: 'Rocket Body',
478
+ [SpaceObjectType.DEBRIS]: 'Debris',
479
+ [SpaceObjectType.SPECIAL]: 'Special',
480
+ [SpaceObjectType.BALLISTIC_MISSILE]: 'Ballistic Missile',
481
+ [SpaceObjectType.STAR]: 'Star',
482
+ [SpaceObjectType.INTERGOVERNMENTAL_ORGANIZATION]: 'Intergovernmental Organization',
483
+ [SpaceObjectType.SUBORBITAL_PAYLOAD_OPERATOR]: 'Suborbital Payload Operator',
484
+ [SpaceObjectType.PAYLOAD_OWNER]: 'Payload Owner',
485
+ [SpaceObjectType.METEOROLOGICAL_ROCKET_LAUNCH_AGENCY_OR_MANUFACTURER]:
486
+ 'Meteorological Rocket Launch Agency or Manufacturer',
487
+ [SpaceObjectType.PAYLOAD_MANUFACTURER]: 'Payload Manufacturer',
488
+ [SpaceObjectType.LAUNCH_AGENCY]: 'Launch Agency',
489
+ [SpaceObjectType.LAUNCH_SITE]: 'Launch Site',
490
+ [SpaceObjectType.LAUNCH_POSITION]: 'Launch Position',
491
+ [SpaceObjectType.LAUNCH_FACILITY]: 'Launch Facility',
492
+ [SpaceObjectType.CONTROL_FACILITY]: 'Control Facility',
493
+ [SpaceObjectType.GROUND_SENSOR_STATION]: 'Ground Sensor Station',
494
+ [SpaceObjectType.OPTICAL]: 'Optical',
495
+ [SpaceObjectType.MECHANICAL]: 'Mechanical',
496
+ [SpaceObjectType.PHASED_ARRAY_RADAR]: 'Phased Array Radar',
497
+ [SpaceObjectType.OBSERVER]: 'Observer',
498
+ [SpaceObjectType.BISTATIC_RADIO_TELESCOPE]: 'Bi-static Radio Telescope',
499
+ [SpaceObjectType.COUNTRY]: 'Country',
500
+ [SpaceObjectType.LAUNCH_VEHICLE_MANUFACTURER]: 'Launch Vehicle Manufacturer',
501
+ [SpaceObjectType.ENGINE_MANUFACTURER]: 'Engine Manufacturer',
502
+ [SpaceObjectType.NOTIONAL]: 'Notional',
503
+ [SpaceObjectType.FRAGMENT]: 'Fragment',
504
+ [SpaceObjectType.SHORT_TERM_FENCE]: 'Short Term Fence',
505
+ [SpaceObjectType.MAX_SPACE_OBJECT_TYPE]: 'Max Space Object Type',
506
+ };
507
+
508
+ /**
509
+ * Converts a SpaceObjectType to a string representation.
510
+ * @param spaceObjType - The SpaceObjectType to convert.
511
+ * @returns The string representation of the SpaceObjectType.
512
+ */
513
+ export const spaceObjType2Str = (spaceObjType: SpaceObjectType): string =>
514
+ spaceObjTypeStrMap_[spaceObjType] || 'Unknown';
515
+
516
+ /**
517
+ * Calculates the Doppler factor for a given location, position, and velocity.
518
+ * The Doppler factor is a measure of the change in frequency or wavelength of a wave
519
+ * as observed by an observer moving relative to the source of the wave.
520
+ * @param location - The location vector of the observer.
521
+ * @param position - The position vector of the source.
522
+ * @param velocity - The velocity vector of the source.
523
+ * @returns The calculated Doppler factor.
524
+ */
525
+ export const dopplerFactor = (
526
+ location: EcfVec3<Kilometers>,
527
+ position: EcfVec3<Kilometers>,
528
+ velocity: EcfVec3<KilometersPerSecond>,
529
+ ): number => {
530
+ const range = <EcfVec3>{
531
+ x: position.x - location.x,
532
+ y: position.y - location.y,
533
+ z: position.z - location.z,
534
+ };
535
+ const distance = Math.sqrt(range.x ** 2 + range.y ** 2 + range.z ** 2);
536
+ const rangeVel = <EcfVec3<KilometersPerSecond>>{
537
+ x: velocity.x + angularVelocityOfEarth * location.y,
538
+ y: velocity.y - angularVelocityOfEarth * location.x,
539
+ z: velocity.z,
540
+ };
541
+ const rangeRate = (range.x * rangeVel.x + range.y * rangeVel.y + range.z * rangeVel.z) / distance;
542
+ const dopplerFactor = 1 - rangeRate / cKmPerSec;
543
+
544
+ return dopplerFactor;
545
+ };
546
+
547
+ /**
548
+ * Creates an array of numbers from start to stop (inclusive) with the specified step.
549
+ * @param start The starting number.
550
+ * @param stop The ending number.
551
+ * @param step The step value.
552
+ * @returns An array of numbers.
553
+ */
554
+ export function createVec(start: number, stop: number, step: number): number[] {
555
+ const array = [] as number[];
556
+
557
+ for (let i = start; i <= stop; i += step) {
558
+ array.push(i);
559
+ }
560
+
561
+ return array;
562
+ }
563
+
2
564
 
3
565
  /**
4
566
  * Calculates the derivative of a differentiable function.
@@ -1,2 +1,4 @@
1
- export * from './jacobian.js';
2
1
  export * from './functions.js';
2
+ export * from './constants.js';
3
+ export * from './linearDistance.js';
4
+ export * from './jacobian.js';
@@ -1,4 +1,4 @@
1
- import { array2d, Matrix, Vector } from 'ootk-core';
1
+ import { array2d, Matrix, Vector } from '../main.js';
2
2
  import { JacobianFunction } from '../types/types.js';
3
3
 
4
4
  // TODO: #11 Expand documentation of Jacobian function.
@@ -0,0 +1,11 @@
1
+ import { Vec3 } from '../types/types.js';
2
+
3
+ /**
4
+ * Calculates the linear distance between two points in three-dimensional space.
5
+ * @param pos1 The first position.
6
+ * @param pos2 The second position.
7
+ * @returns The linear distance between the two positions in kilometers.
8
+ */
9
+ export function linearDistance<D extends number>(pos1: Vec3<D>, pos2: Vec3<D>): D {
10
+ return <D>Math.sqrt((pos1.x - pos2.x) ** 2 + (pos1.y - pos2.y) ** 2 + (pos1.z - pos2.z) ** 2);
11
+ }