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,556 @@
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
+ * @copyright (c) 2011-2015, Vladimir Agafonkin
23
+ * @copyright (c) 2022 Robert Gester https://github.com/hypnos3/suncalc3
24
+ * @see suncalc.LICENSE.md
25
+ * Some of the math in this file was originally created by Vladimir Agafonkin.
26
+ * Robert Gester's update was referenced for documentation. There were a couple
27
+ * of bugs in both versions so there will be some differences if you are
28
+ * migrating from either to this library.
29
+ *
30
+ * suncalc is a JavaScript library for calculating sun/moon position and light
31
+ * phases. https://github.com/mourner/suncalc
32
+ * It was reworked and enhanced by Robert Gester.
33
+ *
34
+ * The original suncalc is released under the terms of the BSD 2-Clause License.
35
+ * @see http://aa.quae.nl/en/reken/hemelpositie.html
36
+ * moon calculations are based on formulas from this website
37
+ */
38
+
39
+ import { AngularDiameterMethod, Celestial, Degrees, Kilometers, RaDec, Radians } from '../main.js';
40
+ import { Vector3D } from '../operations/Vector3D.js';
41
+ import { EpochUTC } from '../time/EpochUTC.js';
42
+ import { DEG2RAD, MS_PER_DAY } from '../utils/constants.js';
43
+ import { angularDiameter } from '../utils/functions.js';
44
+ import { Earth } from './Earth.js';
45
+ import { Sun } from './Sun.js';
46
+
47
+ type MoonIlluminationData = {
48
+ fraction: number;
49
+ phase: {
50
+ from: number;
51
+ to: number;
52
+ id: string;
53
+ emoji: string;
54
+ code: string;
55
+ name: string;
56
+ weight: number;
57
+ css: string;
58
+ };
59
+ phaseValue: number;
60
+ angle: number;
61
+ next: {
62
+ value: number;
63
+ date: string;
64
+ type: string;
65
+ newMoon: {
66
+ value: number;
67
+ date: string;
68
+ };
69
+ fullMoon: {
70
+ value: number;
71
+ date: string;
72
+ };
73
+ firstQuarter: {
74
+ value: number;
75
+ date: string;
76
+ };
77
+ thirdQuarter: {
78
+ value: number;
79
+ date: string;
80
+ };
81
+ };
82
+ };
83
+
84
+ // / Moon metrics and operations.
85
+ export class Moon {
86
+ private constructor() {
87
+ // disable constructor
88
+ }
89
+
90
+ // / Moon gravitational parameter _(km³/s²)_.
91
+ static readonly mu = 4902.799;
92
+
93
+ // / Moon equatorial radius _(km)_.
94
+ static readonly radiusEquator = 1738.0;
95
+
96
+ // / Calculate the Moon's ECI position _(km)_ for a given UTC [epoch].
97
+ static eci(epoch: EpochUTC = EpochUTC.fromDateTime(new Date())): Vector3D<Kilometers> {
98
+ const jc = epoch.toJulianCenturies();
99
+ const dtr = DEG2RAD;
100
+ const lamEcl =
101
+ 218.32 +
102
+ 481267.8813 * jc +
103
+ 6.29 * Math.sin((134.9 + 477198.85 * jc) * dtr) -
104
+ 1.27 * Math.sin((259.2 - 413335.38 * jc) * dtr) +
105
+ 0.66 * Math.sin((235.7 + 890534.23 * jc) * dtr) +
106
+ 0.21 * Math.sin((269.9 + 954397.7 * jc) * dtr) -
107
+ 0.19 * Math.sin((357.5 + 35999.05 * jc) * dtr) -
108
+ 0.11 * Math.sin((186.6 + 966404.05 * jc) * dtr);
109
+ const phiEcl =
110
+ 5.13 * Math.sin((93.3 + 483202.03 * jc) * dtr) +
111
+ 0.28 * Math.sin((228.2 + 960400.87 * jc) * dtr) -
112
+ 0.28 * Math.sin((318.3 + 6003.18 * jc) * dtr) -
113
+ 0.17 * Math.sin((217.6 - 407332.2 * jc) * dtr);
114
+ const pllx =
115
+ 0.9508 +
116
+ 0.0518 * Math.cos((134.9 + 477198.85 * jc) * dtr) +
117
+ 0.0095 * Math.cos((259.2 - 413335.38 * jc) * dtr) +
118
+ 0.0078 * Math.cos((235.7 + 890534.23 * jc) * dtr) +
119
+ 0.0028 * Math.cos((269.9 + 954397.7 * jc) * dtr);
120
+ const obq = 23.439291 - 0.0130042 * jc;
121
+ const rMag = 1 / Math.sin(pllx * dtr);
122
+ const r = new Vector3D(
123
+ rMag * Math.cos(phiEcl * dtr) * Math.cos(lamEcl * dtr),
124
+ rMag *
125
+ (Math.cos(obq * dtr) * Math.cos(phiEcl * dtr) * Math.sin(lamEcl * dtr) -
126
+ Math.sin(obq * dtr) * Math.sin(phiEcl * dtr)),
127
+ rMag *
128
+ (Math.sin(obq * dtr) * Math.cos(phiEcl * dtr) * Math.sin(lamEcl * dtr) +
129
+ Math.cos(obq * dtr) * Math.sin(phiEcl * dtr)),
130
+ );
131
+ const rMOD = r.scale(Earth.radiusEquator);
132
+ const p = Earth.precession(epoch);
133
+
134
+ return rMOD
135
+ .rotZ(p.zed)
136
+ .rotY(-p.theta as Radians)
137
+ .rotZ(p.zeta);
138
+ }
139
+
140
+ /**
141
+ * Calculates the illumination of the Moon at a given epoch.
142
+ * @param epoch - The epoch in UTC.
143
+ * @param origin - The origin vector. Defaults to the origin vector if not provided.
144
+ * @returns The illumination of the Moon, ranging from 0 to 1.
145
+ */
146
+ static illumination(epoch: EpochUTC, origin?: Vector3D<Kilometers>): number {
147
+ const orig = origin ?? (Vector3D.origin as Vector3D<Kilometers>);
148
+ const sunPos = Sun.position(epoch).subtract(orig);
149
+ const moonPos = this.eci(epoch).subtract(orig);
150
+ const phaseAngle = sunPos.angle(moonPos);
151
+
152
+ return 0.5 * (1 - Math.cos(phaseAngle));
153
+ }
154
+
155
+ /**
156
+ * Calculates the diameter of the Moon.
157
+ * @param obsPos - The position of the observer.
158
+ * @param moonPos - The position of the Moon.
159
+ * @returns The diameter of the Moon.
160
+ */
161
+ static diameter(obsPos: Vector3D, moonPos: Vector3D): number {
162
+ return angularDiameter(this.radiusEquator * 2, obsPos.subtract(moonPos).magnitude(), AngularDiameterMethod.Sphere);
163
+ }
164
+
165
+ /**
166
+ * calculations for illumination parameters of the moon, based on
167
+ * http://idlastro.gsfc.nasa.gov/ftp/pro/astro/mphase.pro formulas and Chapter 48 of "Astronomical Algorithms" 2nd
168
+ * edition by Jean Meeus (Willmann-Bell, Richmond) 1998.
169
+ * @param date Date object or timestamp for calculating moon-illumination
170
+ * @returns result object of moon-illumination
171
+ */
172
+ // eslint-disable-next-line max-statements
173
+ static getMoonIllumination(date: number | Date): MoonIlluminationData {
174
+ const dateValue = date instanceof Date ? date.getTime() : date;
175
+
176
+ const lunarDaysMs = 2551442778; // The duration in days of a lunar cycle is 29.53058770576 days.
177
+ const firstNewMoon2000 = 947178840000; // first newMoon in the year 2000 2000-01-06 18:14
178
+ const dateObj = new Date(dateValue);
179
+ const d = Sun.date2jSince2000(dateObj);
180
+ const s = Sun.raDec(dateObj);
181
+ const m = Moon.moonCoords(d);
182
+ const sdist = 149598000; // distance from Earth to Sun in km
183
+ const phi = Math.acos(
184
+ Math.sin(s.dec) * Math.sin(m.dec) + Math.cos(s.dec) * Math.cos(m.dec) * Math.cos(s.ra - m.ra),
185
+ );
186
+ const inc = Math.atan2(sdist * Math.sin(phi), m.dist - sdist * Math.cos(phi));
187
+ const angle = Math.atan2(
188
+ Math.cos(s.dec) * Math.sin(s.ra - m.ra),
189
+ Math.sin(s.dec) * Math.cos(m.dec) - Math.cos(s.dec) * Math.sin(m.dec) * Math.cos(s.ra - m.ra),
190
+ );
191
+ const phaseValue = 0.5 + (0.5 * inc * (angle < 0 ? -1 : 1)) / Math.PI;
192
+
193
+ /*
194
+ * calculates the difference in ms between the sirst fullMoon 2000 and given
195
+ * Date
196
+ */
197
+ const diffBase = dateValue - firstNewMoon2000;
198
+ // Calculate modulus to drop completed cycles
199
+ let cycleModMs = diffBase % lunarDaysMs;
200
+ // If negative number (date before new moon 2000) add lunarDaysMs
201
+
202
+ if (cycleModMs < 0) {
203
+ cycleModMs += lunarDaysMs;
204
+ }
205
+ const nextNewMoon = lunarDaysMs - cycleModMs + dateValue;
206
+ let nextFullMoon = lunarDaysMs / 2 - cycleModMs + dateValue;
207
+
208
+ if (nextFullMoon < dateValue) {
209
+ nextFullMoon += lunarDaysMs;
210
+ }
211
+ const quater = lunarDaysMs / 4;
212
+ let nextFirstQuarter = quater - cycleModMs + dateValue;
213
+
214
+ if (nextFirstQuarter < dateValue) {
215
+ nextFirstQuarter += lunarDaysMs;
216
+ }
217
+ let nextThirdQuarter = lunarDaysMs - quater - cycleModMs + dateValue;
218
+
219
+ if (nextThirdQuarter < dateValue) {
220
+ nextThirdQuarter += lunarDaysMs;
221
+ }
222
+ /*
223
+ * Calculate the fraction of the moon cycle const currentfrac = cycleModMs /
224
+ * lunarDaysMs;
225
+ */
226
+ const next = Math.min(nextNewMoon, nextFirstQuarter, nextFullMoon, nextThirdQuarter);
227
+ // eslint-disable-next-line init-declarations
228
+ let phase: (typeof Moon.moonCycles_)[0] | null = null;
229
+
230
+ for (const moonCycle of Moon.moonCycles_) {
231
+ if (phaseValue >= moonCycle.from && phaseValue <= moonCycle.to) {
232
+ phase = moonCycle;
233
+ break;
234
+ }
235
+ }
236
+
237
+ if (!phase) {
238
+ throw new Error('Moon phase not found');
239
+ }
240
+
241
+ let type = '';
242
+
243
+ if (next === nextNewMoon) {
244
+ type = 'newMoon';
245
+ } else if (next === nextFirstQuarter) {
246
+ type = 'firstQuarter';
247
+ } else if (next === nextFullMoon) {
248
+ type = 'fullMoon';
249
+ } else {
250
+ type = 'thirdQuarter';
251
+ }
252
+
253
+ return {
254
+ fraction: (1 + Math.cos(inc)) / 2,
255
+ phase,
256
+ phaseValue,
257
+ angle,
258
+ next: {
259
+ value: next,
260
+ date: new Date(next).toISOString(),
261
+ type,
262
+ newMoon: {
263
+ value: nextNewMoon,
264
+ date: new Date(nextNewMoon).toISOString(),
265
+ },
266
+ fullMoon: {
267
+ value: nextFullMoon,
268
+ date: new Date(nextFullMoon).toISOString(),
269
+ },
270
+ firstQuarter: {
271
+ value: nextFirstQuarter,
272
+ date: new Date(nextFirstQuarter).toISOString(),
273
+ },
274
+ thirdQuarter: {
275
+ value: nextThirdQuarter,
276
+ date: new Date(nextThirdQuarter).toISOString(),
277
+ },
278
+ },
279
+ };
280
+ }
281
+
282
+ static rae(
283
+ date: Date,
284
+ lat: Degrees,
285
+ lon: Degrees,
286
+ ): {
287
+ az: Radians;
288
+ el: Radians;
289
+ rng: Kilometers;
290
+ parallacticAngle: Radians;
291
+ } {
292
+ const lw = <Radians>(DEG2RAD * -lon);
293
+ const phi = <Radians>(DEG2RAD * lat);
294
+ const d = Sun.date2jSince2000(date);
295
+ const c = Moon.moonCoords(d);
296
+ const H = Sun.siderealTime(d, lw) - c.ra;
297
+ let h = Celestial.elevation(H, phi, c.dec);
298
+ /*
299
+ * formula 14.1 of "Astronomical Algorithms" 2nd edition by Jean Meeus
300
+ * (Willmann-Bell, Richmond) 1998.
301
+ */
302
+ const pa = Math.atan2(Math.sin(H), Math.tan(phi) * Math.cos(c.dec) - Math.sin(c.dec) * Math.cos(H));
303
+
304
+ h = <Radians>(h + Celestial.atmosphericRefraction(h)); // altitude correction for refraction
305
+
306
+ return {
307
+ az: Celestial.azimuth(H, phi, c.dec),
308
+ el: h,
309
+ rng: c.dist,
310
+ parallacticAngle: pa as Radians,
311
+ };
312
+ }
313
+
314
+ /**
315
+ * calculations for moon rise/set times are based on http://www.stargazing.net/kepler/moonrise.html article
316
+ * @param date Date object or timestamp for calculating moon rise/set
317
+ * @param lat Latitude of observer in degrees
318
+ * @param lon Longitude of observer in degrees
319
+ * @param isUtc If true, date will be interpreted as UTC
320
+ * @returns result object of moon rise/set
321
+ */
322
+ static getMoonTimes(date: Date, lat: Degrees, lon: Degrees, isUtc = false) {
323
+ // Clone the date so we don't change the original
324
+ const date_ = new Date(date);
325
+
326
+ if (isUtc) {
327
+ date_.setUTCHours(0, 0, 0, 0);
328
+ } else {
329
+ date_.setHours(0, 0, 0, 0);
330
+ }
331
+
332
+ const { rise, set, ye } = Moon.calculateRiseSetTimes_(date_, lat, lon);
333
+
334
+ const result = {
335
+ rise: null as Date | null,
336
+ set: null as Date | null,
337
+ ye: null as number | null,
338
+ alwaysUp: null as boolean | null,
339
+ alwaysDown: null as boolean | null,
340
+ highest: null as Date | null,
341
+ };
342
+
343
+ if (rise) {
344
+ result.rise = new Date(Moon.hoursLater_(date_, rise));
345
+ }
346
+
347
+ if (set) {
348
+ result.set = new Date(Moon.hoursLater_(date_, set));
349
+ }
350
+
351
+ if (!rise && !set) {
352
+ if (ye > 0) {
353
+ result.alwaysUp = true;
354
+ result.alwaysDown = false;
355
+ } else {
356
+ result.alwaysUp = false;
357
+ result.alwaysDown = true;
358
+ }
359
+ } else if (rise && set) {
360
+ result.alwaysUp = false;
361
+ result.alwaysDown = false;
362
+ result.highest = new Date(Moon.hoursLater_(date_, Math.min(rise, set) + Math.abs(set - rise) / 2));
363
+ } else {
364
+ result.alwaysUp = false;
365
+ result.alwaysDown = false;
366
+ }
367
+
368
+ return result;
369
+ }
370
+
371
+ private static hoursLater_(date: Date, h: number) {
372
+ return new Date(date.getTime() + (h * MS_PER_DAY) / 24);
373
+ }
374
+
375
+ /**
376
+ * Calculates the geocentric ecliptic coordinates of the moon.
377
+ * @param d - The number of days since year 2000.
378
+ * @returns An object containing the right ascension, declination, and
379
+ * distance to the moon.
380
+ */
381
+ static moonCoords(d: number): RaDec {
382
+ const L = DEG2RAD * (218.316 + 13.176396 * d); // ecliptic longitude
383
+ const M = DEG2RAD * (134.963 + 13.064993 * d); // mean anomaly
384
+ const F = DEG2RAD * (93.272 + 13.22935 * d); // mean distance
385
+ const l = L + DEG2RAD * 6.289 * Math.sin(M); // longitude
386
+ const b = DEG2RAD * 5.128 * Math.sin(F); // latitude
387
+ const dt = 385001 - 20905 * Math.cos(M); // distance to the moon in km
388
+
389
+ return {
390
+ ra: Celestial.rightAscension(l, b),
391
+ dec: Celestial.declination(l, b),
392
+ dist: dt as Kilometers,
393
+ };
394
+ }
395
+
396
+ private static calculateRiseSetTimes_(t: Date, lat: Degrees, lon: Degrees) {
397
+ const hc = 0.133 * DEG2RAD;
398
+ let h0 = Moon.rae(t, lat, lon).el - hc;
399
+ let h1 = 0;
400
+ let h2 = 0;
401
+ let rise = 0;
402
+ let set = 0;
403
+ let a = 0;
404
+ let b = 0;
405
+ let xe = 0;
406
+ let ye = 0;
407
+ let d = 0;
408
+ let roots = 0;
409
+ let x1 = 0;
410
+ let x2 = 0;
411
+ let dx = 0;
412
+
413
+ /*
414
+ * go in 2-hour chunks, each time seeing if a 3-point quadratic curve
415
+ * crosses zero (which means rise or set)
416
+ */
417
+ for (let i = 1; i <= 24; i += 2) {
418
+ h1 = Moon.rae(Moon.hoursLater_(t, i), lat, lon).el - hc;
419
+ h2 = Moon.rae(Moon.hoursLater_(t, i + 1), lat, lon).el - hc;
420
+
421
+ a = (h0 + h2) / 2 - h1;
422
+ b = (h2 - h0) / 2;
423
+ xe = -b / (2 * a);
424
+ ye = (a * xe + b) * xe + h1;
425
+ d = b * b - 4 * a * h1;
426
+ roots = 0;
427
+
428
+ if (d >= 0) {
429
+ dx = Math.sqrt(d) / (Math.abs(a) * 2);
430
+ x1 = xe - dx;
431
+ x2 = xe + dx;
432
+ if (Math.abs(x1) <= 1) {
433
+ roots++;
434
+ }
435
+ if (Math.abs(x2) <= 1) {
436
+ roots++;
437
+ }
438
+ if (x1 < -1) {
439
+ x1 = x2;
440
+ }
441
+ }
442
+
443
+ if (roots === 1) {
444
+ if (h0 < 0) {
445
+ rise = i + x1;
446
+ } else {
447
+ set = i + x1;
448
+ }
449
+ } else if (roots === 2) {
450
+ rise = i + (ye < 0 ? x2 : x1);
451
+ set = i + (ye < 0 ? x1 : x2);
452
+ }
453
+
454
+ if (rise && set) {
455
+ break;
456
+ }
457
+
458
+ h0 = h2;
459
+ }
460
+
461
+ return { rise, set, ye };
462
+ }
463
+
464
+ private static readonly moonCycles_ = [
465
+ {
466
+ from: 0,
467
+ to: 0.033863193308711,
468
+ id: 'newMoon',
469
+ emoji: '🌚',
470
+ code: ':new_moon_with_face:',
471
+ name: 'New Moon',
472
+ weight: 1,
473
+ css: 'wi-moon-new',
474
+ },
475
+ {
476
+ from: 0.033863193308711,
477
+ to: 0.216136806691289,
478
+ id: 'waxingCrescentMoon',
479
+ emoji: '🌒',
480
+ code: ':waxing_crescent_moon:',
481
+ name: 'Waxing Crescent',
482
+ weight: 6.3825,
483
+ css: 'wi-moon-wax-cres',
484
+ },
485
+ {
486
+ from: 0.216136806691289,
487
+ to: 0.283863193308711,
488
+ id: 'firstQuarterMoon',
489
+ emoji: '🌓',
490
+ code: ':first_quarter_moon:',
491
+ name: 'First Quarter',
492
+ weight: 1,
493
+ css: 'wi-moon-first-quart',
494
+ },
495
+ {
496
+ from: 0.283863193308711,
497
+ to: 0.466136806691289,
498
+ id: 'waxingGibbousMoon',
499
+ emoji: '🌔',
500
+ code: ':waxing_gibbous_moon:',
501
+ name: 'Waxing Gibbous',
502
+ weight: 6.3825,
503
+ css: 'wi-moon-wax-gibb',
504
+ },
505
+ {
506
+ from: 0.466136806691289,
507
+ to: 0.533863193308711,
508
+ id: 'fullMoon',
509
+ emoji: '🌝',
510
+ code: ':full_moon_with_face:',
511
+ name: 'Full Moon',
512
+ weight: 1,
513
+ css: 'wi-moon-full',
514
+ },
515
+ {
516
+ from: 0.533863193308711,
517
+ to: 0.716136806691289,
518
+ id: 'waningGibbousMoon',
519
+ emoji: '🌖',
520
+ code: ':waning_gibbous_moon:',
521
+ name: 'Waning Gibbous',
522
+ weight: 6.3825,
523
+ css: 'wi-moon-wan-gibb',
524
+ },
525
+ {
526
+ from: 0.716136806691289,
527
+ to: 0.783863193308711,
528
+ id: 'thirdQuarterMoon',
529
+ emoji: '🌗',
530
+ code: ':last_quarter_moon:',
531
+ name: 'third Quarter',
532
+ weight: 1,
533
+ css: 'wi-moon-third-quart',
534
+ },
535
+ {
536
+ from: 0.783863193308711,
537
+ to: 0.966136806691289,
538
+ id: 'waningCrescentMoon',
539
+ emoji: '🌘',
540
+ code: ':waning_crescent_moon:',
541
+ name: 'Waning Crescent',
542
+ weight: 6.3825,
543
+ css: 'wi-moon-wan-cres',
544
+ },
545
+ {
546
+ from: 0.966136806691289,
547
+ to: 1,
548
+ id: 'newMoon',
549
+ emoji: '🌚',
550
+ code: ':new_moon_with_face:',
551
+ name: 'New Moon',
552
+ weight: 1,
553
+ css: 'wi-moon-new',
554
+ },
555
+ ];
556
+ }
@@ -0,0 +1,40 @@
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
+
24
+ import { Radians } from '../main.js';
25
+
26
+ /** Represents the nutation angles. */
27
+ export type NutationAngles = {
28
+ /** The nutation in longitude (Δψ) in radians. */
29
+ dPsi: Radians;
30
+ /** The nutation in obliquity (Δε) in radians. */
31
+ dEps: Radians;
32
+ /** The mean obliquity of the ecliptic (ε₀) in radians. */
33
+ mEps: Radians;
34
+ /** The true obliquity of the ecliptic (ε) in radians. */
35
+ eps: Radians;
36
+ /** The equation of the equinoxes (ΔΔt) in radians. */
37
+ eqEq: Radians;
38
+ /** The Greenwich Apparent Sidereal Time (GAST) in radians. */
39
+ gast: Radians;
40
+ };
@@ -0,0 +1,31 @@
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
+
24
+ import { Radians } from '../main.js';
25
+
26
+ /** Represents the precession angles in radians. */
27
+ export type PrecessionAngles = {
28
+ zeta: Radians;
29
+ theta: Radians;
30
+ zed: Radians;
31
+ };