ootk 3.0.0 → 4.0.0-1

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 (357) hide show
  1. package/CHANGELOG.md +235 -10
  2. package/README.md +27 -40
  3. package/dist/coordinate/Hill.d.ts +49 -0
  4. package/dist/coordinate/Hill.js +222 -0
  5. package/dist/coordinate/Hill.js.map +1 -0
  6. package/dist/coordinate/index.d.ts +1 -0
  7. package/dist/coordinate/index.js +2 -0
  8. package/dist/coordinate/index.js.map +1 -0
  9. package/dist/covariance/CovarianceSample.d.ts +43 -0
  10. package/dist/covariance/CovarianceSample.js +147 -0
  11. package/dist/covariance/CovarianceSample.js.map +1 -0
  12. package/dist/covariance/StateCovariance.d.ts +42 -0
  13. package/dist/covariance/StateCovariance.js +65 -0
  14. package/dist/covariance/StateCovariance.js.map +1 -0
  15. package/dist/force/AtmosphericDrag.d.ts +31 -0
  16. package/dist/force/AtmosphericDrag.js +73 -0
  17. package/dist/force/AtmosphericDrag.js.map +1 -0
  18. package/dist/force/EarthGravity.d.ts +27 -0
  19. package/dist/force/EarthGravity.js +117 -0
  20. package/dist/force/EarthGravity.js.map +1 -0
  21. package/{lib/ootk.d.ts → dist/force/Force.d.ts} +12 -11
  22. package/dist/force/Force.js +31 -0
  23. package/dist/force/Force.js.map +1 -0
  24. package/dist/force/ForceModel.d.ts +37 -0
  25. package/dist/force/ForceModel.js +75 -0
  26. package/dist/force/ForceModel.js.map +1 -0
  27. package/dist/force/Gravity.d.ts +38 -0
  28. package/dist/force/Gravity.js +47 -0
  29. package/dist/force/Gravity.js.map +1 -0
  30. package/dist/{ootk.d.ts → force/SolarRadiationPressure.d.ts} +12 -11
  31. package/dist/force/SolarRadiationPressure.js +44 -0
  32. package/dist/force/SolarRadiationPressure.js.map +1 -0
  33. package/dist/force/ThirdBodyGravity.d.ts +26 -0
  34. package/dist/force/ThirdBodyGravity.js +57 -0
  35. package/dist/force/ThirdBodyGravity.js.map +1 -0
  36. package/dist/force/Thrust.d.ts +34 -0
  37. package/dist/force/Thrust.js +58 -0
  38. package/dist/force/Thrust.js.map +1 -0
  39. package/dist/interfaces/RfSensorParams.d.ts +28 -0
  40. package/dist/interfaces/RfSensorParams.js +24 -0
  41. package/dist/interfaces/RfSensorParams.js.map +1 -0
  42. package/dist/interfaces/index.d.ts +1 -0
  43. package/dist/interfaces/index.js +2 -0
  44. package/dist/interfaces/index.js.map +1 -0
  45. package/dist/interpolator/ChebyshevCoefficients.d.ts +50 -0
  46. package/dist/interpolator/ChebyshevCoefficients.js +94 -0
  47. package/dist/interpolator/ChebyshevCoefficients.js.map +1 -0
  48. package/dist/interpolator/ChebyshevInterpolator.d.ts +38 -0
  49. package/dist/interpolator/ChebyshevInterpolator.js +71 -0
  50. package/dist/interpolator/ChebyshevInterpolator.js.map +1 -0
  51. package/dist/interpolator/CubicSpline.d.ts +35 -0
  52. package/dist/interpolator/CubicSpline.js +69 -0
  53. package/dist/interpolator/CubicSpline.js.map +1 -0
  54. package/dist/interpolator/CubicSplineInterpolator.d.ts +36 -0
  55. package/dist/interpolator/CubicSplineInterpolator.js +80 -0
  56. package/dist/interpolator/CubicSplineInterpolator.js.map +1 -0
  57. package/dist/interpolator/FieldInterpolator.d.ts +28 -0
  58. package/dist/interpolator/FieldInterpolator.js +34 -0
  59. package/dist/interpolator/FieldInterpolator.js.map +1 -0
  60. package/dist/interpolator/Interpolator.d.ts +22 -0
  61. package/dist/interpolator/Interpolator.js +47 -0
  62. package/dist/interpolator/Interpolator.js.map +1 -0
  63. package/dist/interpolator/LagrangeInterpolator.d.ts +40 -0
  64. package/dist/interpolator/LagrangeInterpolator.js +159 -0
  65. package/dist/interpolator/LagrangeInterpolator.js.map +1 -0
  66. package/dist/interpolator/StateInterpolator.d.ts +27 -0
  67. package/dist/interpolator/StateInterpolator.js +35 -0
  68. package/dist/interpolator/StateInterpolator.js.map +1 -0
  69. package/dist/interpolator/VerletBlendInterpolator.d.ts +43 -0
  70. package/dist/interpolator/VerletBlendInterpolator.js +118 -0
  71. package/dist/interpolator/VerletBlendInterpolator.js.map +1 -0
  72. package/{lib/ootk.js → dist/main.d.ts} +13 -10
  73. package/dist/{objects/space-object.d.ts → main.js} +17 -23
  74. package/dist/main.js.map +1 -0
  75. package/dist/maneuver/TwoBurnOrbitTransfer.d.ts +41 -0
  76. package/dist/maneuver/TwoBurnOrbitTransfer.js +65 -0
  77. package/dist/maneuver/TwoBurnOrbitTransfer.js.map +1 -0
  78. package/dist/maneuver/Waypoint.d.ts +91 -0
  79. package/dist/maneuver/Waypoint.js +179 -0
  80. package/dist/maneuver/Waypoint.js.map +1 -0
  81. package/{lib/objects/detailed-sat.d.ts → dist/objects/DetailedSatellite.d.ts} +40 -36
  82. package/dist/objects/DetailedSatellite.js +136 -0
  83. package/dist/objects/DetailedSatellite.js.map +1 -0
  84. package/dist/objects/DetailedSensor.d.ts +42 -0
  85. package/dist/objects/DetailedSensor.js +65 -0
  86. package/dist/objects/DetailedSensor.js.map +1 -0
  87. package/dist/objects/LandObject.d.ts +33 -0
  88. package/dist/objects/LandObject.js +34 -0
  89. package/dist/objects/LandObject.js.map +1 -0
  90. package/dist/objects/Marker.d.ts +20 -0
  91. package/dist/objects/Marker.js +24 -0
  92. package/dist/objects/Marker.js.map +1 -0
  93. package/dist/objects/RfSensor.d.ts +41 -0
  94. package/dist/objects/RfSensor.js +67 -0
  95. package/dist/objects/RfSensor.js.map +1 -0
  96. package/dist/objects/index.d.ts +5 -4
  97. package/dist/objects/index.js +6 -0
  98. package/dist/objects/index.js.map +1 -0
  99. package/dist/observation/Observation.d.ts +89 -0
  100. package/dist/observation/Observation.js +102 -0
  101. package/dist/observation/Observation.js.map +1 -0
  102. package/dist/observation/ObservationOptical.d.ts +48 -0
  103. package/dist/observation/ObservationOptical.js +105 -0
  104. package/dist/observation/ObservationOptical.js.map +1 -0
  105. package/dist/observation/ObservationRadar.d.ts +46 -0
  106. package/dist/observation/ObservationRadar.js +96 -0
  107. package/dist/observation/ObservationRadar.js.map +1 -0
  108. package/dist/observation/ObservationUtils.d.ts +20 -0
  109. package/dist/observation/ObservationUtils.js +32 -0
  110. package/dist/observation/ObservationUtils.js.map +1 -0
  111. package/dist/observation/PropagatorPairs.d.ts +32 -0
  112. package/dist/observation/PropagatorPairs.js +43 -0
  113. package/dist/observation/PropagatorPairs.js.map +1 -0
  114. package/dist/operations/BoxMuller.d.ts +46 -0
  115. package/dist/operations/BoxMuller.js +77 -0
  116. package/dist/operations/BoxMuller.js.map +1 -0
  117. package/dist/operations/EulerAngles.d.ts +105 -0
  118. package/dist/operations/EulerAngles.js +161 -0
  119. package/dist/operations/EulerAngles.js.map +1 -0
  120. package/dist/operations/Quaternion.d.ts +56 -0
  121. package/dist/operations/Quaternion.js +167 -0
  122. package/dist/operations/Quaternion.js.map +1 -0
  123. package/dist/operations/RandomGaussianSource.d.ts +24 -0
  124. package/dist/operations/RandomGaussianSource.js +43 -0
  125. package/dist/operations/RandomGaussianSource.js.map +1 -0
  126. package/dist/operations/index.d.ts +4 -0
  127. package/dist/operations/index.js +5 -0
  128. package/dist/operations/index.js.map +1 -0
  129. package/dist/optimize/ChebyshevCompressor.d.ts +32 -0
  130. package/dist/optimize/ChebyshevCompressor.js +83 -0
  131. package/dist/optimize/ChebyshevCompressor.js.map +1 -0
  132. package/dist/optimize/DownhillSimplex.d.ts +64 -0
  133. package/dist/optimize/DownhillSimplex.js +182 -0
  134. package/dist/optimize/DownhillSimplex.js.map +1 -0
  135. package/dist/optimize/GoldenSection.d.ts +39 -0
  136. package/dist/optimize/GoldenSection.js +55 -0
  137. package/dist/optimize/GoldenSection.js.map +1 -0
  138. package/dist/optimize/PolynomialRegression.d.ts +49 -0
  139. package/dist/optimize/PolynomialRegression.js +83 -0
  140. package/dist/optimize/PolynomialRegression.js.map +1 -0
  141. package/dist/optimize/PolynomicalRegressionResult.d.ts +31 -0
  142. package/dist/optimize/PolynomicalRegressionResult.js +38 -0
  143. package/dist/optimize/PolynomicalRegressionResult.js.map +1 -0
  144. package/dist/optimize/SimpleLinearRegression.d.ts +44 -0
  145. package/dist/optimize/SimpleLinearRegression.js +112 -0
  146. package/dist/optimize/SimpleLinearRegression.js.map +1 -0
  147. package/dist/optimize/SimplexEntry.d.ts +32 -0
  148. package/dist/optimize/SimplexEntry.js +42 -0
  149. package/dist/optimize/SimplexEntry.js.map +1 -0
  150. package/dist/orbit_determination/BatchLeastSquaresOD.d.ts +65 -0
  151. package/dist/orbit_determination/BatchLeastSquaresOD.js +143 -0
  152. package/dist/orbit_determination/BatchLeastSquaresOD.js.map +1 -0
  153. package/dist/orbit_determination/BatchLeastSquaresResult.d.ts +31 -0
  154. package/{lib/objects/space-object.d.ts → dist/orbit_determination/BatchLeastSquaresResult.js} +21 -23
  155. package/dist/orbit_determination/BatchLeastSquaresResult.js.map +1 -0
  156. package/dist/orbit_determination/GibbsIOD.d.ts +38 -0
  157. package/dist/orbit_determination/GibbsIOD.js +76 -0
  158. package/dist/orbit_determination/GibbsIOD.js.map +1 -0
  159. package/dist/orbit_determination/GoodingIOD.d.ts +51 -0
  160. package/dist/orbit_determination/GoodingIOD.js +247 -0
  161. package/dist/orbit_determination/GoodingIOD.js.map +1 -0
  162. package/dist/orbit_determination/HerrickGibbsIOD.d.ts +33 -0
  163. package/dist/orbit_determination/HerrickGibbsIOD.js +50 -0
  164. package/dist/orbit_determination/HerrickGibbsIOD.js.map +1 -0
  165. package/dist/orbit_determination/LambertIOD.d.ts +59 -0
  166. package/dist/orbit_determination/LambertIOD.js +213 -0
  167. package/dist/orbit_determination/LambertIOD.js.map +1 -0
  168. package/dist/orbit_determination/ModifiedGoodingIOD.d.ts +40 -0
  169. package/dist/orbit_determination/ModifiedGoodingIOD.js +83 -0
  170. package/dist/orbit_determination/ModifiedGoodingIOD.js.map +1 -0
  171. package/dist/propagator/DormandPrince54Propagator.d.ts +28 -0
  172. package/dist/propagator/DormandPrince54Propagator.js +64 -0
  173. package/dist/propagator/DormandPrince54Propagator.js.map +1 -0
  174. package/dist/propagator/KeplerPropagator.d.ts +35 -0
  175. package/dist/propagator/KeplerPropagator.js +84 -0
  176. package/dist/propagator/KeplerPropagator.js.map +1 -0
  177. package/dist/propagator/Propagator.d.ts +34 -0
  178. package/dist/propagator/Propagator.js +162 -0
  179. package/dist/propagator/Propagator.js.map +1 -0
  180. package/dist/propagator/RkCheckpoint.d.ts +22 -0
  181. package/dist/propagator/RkCheckpoint.js +27 -0
  182. package/dist/propagator/RkCheckpoint.js.map +1 -0
  183. package/dist/propagator/RkResult.d.ts +23 -0
  184. package/dist/propagator/RkResult.js +30 -0
  185. package/dist/propagator/RkResult.js.map +1 -0
  186. package/dist/propagator/RungeKutta4Propagator.d.ts +50 -0
  187. package/dist/propagator/RungeKutta4Propagator.js +141 -0
  188. package/dist/propagator/RungeKutta4Propagator.js.map +1 -0
  189. package/dist/propagator/RungeKutta89Propagator.d.ts +28 -0
  190. package/dist/propagator/RungeKutta89Propagator.js +126 -0
  191. package/dist/propagator/RungeKutta89Propagator.js.map +1 -0
  192. package/dist/propagator/RungeKuttaAdaptive.d.ts +54 -0
  193. package/dist/propagator/RungeKuttaAdaptive.js +159 -0
  194. package/dist/propagator/RungeKuttaAdaptive.js.map +1 -0
  195. package/dist/propagator/Sgp4Propagator.d.ts +34 -0
  196. package/dist/propagator/Sgp4Propagator.js +56 -0
  197. package/dist/propagator/Sgp4Propagator.js.map +1 -0
  198. package/dist/smoothing/ExponentialSmoothing.d.ts +23 -0
  199. package/dist/smoothing/ExponentialSmoothing.js +81 -0
  200. package/dist/smoothing/ExponentialSmoothing.js.map +1 -0
  201. package/dist/transforms/index.d.ts +1 -0
  202. package/dist/transforms/index.js +2 -0
  203. package/dist/transforms/index.js.map +1 -0
  204. package/dist/transforms/transforms.d.ts +56 -92
  205. package/dist/transforms/transforms.js +94 -0
  206. package/dist/transforms/transforms.js.map +1 -0
  207. package/dist/types/types.d.ts +105 -584
  208. package/dist/types/types.js +23 -0
  209. package/dist/types/types.js.map +1 -0
  210. package/dist/utils/index.d.ts +1 -0
  211. package/dist/utils/index.js +2 -0
  212. package/dist/utils/index.js.map +1 -0
  213. package/dist/utils/jacobian.d.ts +11 -0
  214. package/dist/utils/jacobian.js +29 -0
  215. package/dist/utils/jacobian.js.map +1 -0
  216. package/package.json +34 -42
  217. package/src/coordinate/Hill.ts +326 -0
  218. package/src/coordinate/index.ts +1 -0
  219. package/src/covariance/CovarianceSample.ts +194 -0
  220. package/src/covariance/StateCovariance.ts +69 -0
  221. package/src/force/AtmosphericDrag.ts +101 -0
  222. package/src/force/EarthGravity.ts +157 -0
  223. package/src/force/Force.ts +33 -0
  224. package/src/force/ForceModel.ts +91 -0
  225. package/src/force/Gravity.ts +53 -0
  226. package/src/force/SolarRadiationPressure.ts +42 -0
  227. package/src/force/ThirdBodyGravity.ts +62 -0
  228. package/src/force/Thrust.ts +83 -0
  229. package/src/interfaces/RfSensorParams.ts +30 -0
  230. package/src/interfaces/index.ts +1 -0
  231. package/src/interpolator/ChebyshevCoefficients.ts +109 -0
  232. package/src/interpolator/ChebyshevInterpolator.ts +87 -0
  233. package/src/interpolator/CubicSpline.ts +72 -0
  234. package/src/interpolator/CubicSplineInterpolator.ts +90 -0
  235. package/src/interpolator/FieldInterpolator.ts +37 -0
  236. package/src/interpolator/Interpolator.ts +56 -0
  237. package/src/interpolator/LagrangeInterpolator.ts +192 -0
  238. package/src/interpolator/StateInterpolator.ts +39 -0
  239. package/src/interpolator/VerletBlendInterpolator.ts +146 -0
  240. package/src/main.ts +32 -0
  241. package/src/maneuver/TwoBurnOrbitTransfer.ts +79 -0
  242. package/src/maneuver/Waypoint.ts +267 -0
  243. package/src/objects/DetailedSatellite.ts +159 -0
  244. package/src/objects/DetailedSensor.ts +68 -0
  245. package/src/objects/LandObject.ts +46 -0
  246. package/src/objects/Marker.ts +25 -0
  247. package/src/objects/RfSensor.ts +78 -0
  248. package/src/objects/index.ts +5 -0
  249. package/src/observation/Observation.ts +125 -0
  250. package/src/observation/ObservationOptical.ts +146 -0
  251. package/src/observation/ObservationRadar.ts +131 -0
  252. package/src/observation/ObservationUtils.ts +40 -0
  253. package/src/observation/PropagatorPairs.ts +45 -0
  254. package/src/operations/BoxMuller.ts +87 -0
  255. package/src/operations/EulerAngles.ts +183 -0
  256. package/src/operations/Quaternion.ts +222 -0
  257. package/src/operations/RandomGaussianSource.ts +51 -0
  258. package/src/operations/index.ts +4 -0
  259. package/src/optimize/ChebyshevCompressor.ts +96 -0
  260. package/src/optimize/DownhillSimplex.ts +212 -0
  261. package/src/optimize/GoldenSection.ts +71 -0
  262. package/src/optimize/PolynomialRegression.ts +109 -0
  263. package/src/optimize/PolynomicalRegressionResult.ts +32 -0
  264. package/src/optimize/SimpleLinearRegression.ts +127 -0
  265. package/src/optimize/SimplexEntry.ts +50 -0
  266. package/src/orbit_determination/BatchLeastSquaresOD.ts +174 -0
  267. package/src/orbit_determination/BatchLeastSquaresResult.ts +33 -0
  268. package/src/orbit_determination/GibbsIOD.ts +95 -0
  269. package/src/orbit_determination/GoodingIOD.ts +380 -0
  270. package/src/orbit_determination/HerrickGibbsIOD.ts +51 -0
  271. package/src/orbit_determination/LambertIOD.ts +260 -0
  272. package/src/orbit_determination/ModifiedGoodingIOD.ts +133 -0
  273. package/src/propagator/DormandPrince54Propagator.ts +73 -0
  274. package/src/propagator/KeplerPropagator.ts +102 -0
  275. package/src/propagator/Propagator.ts +253 -0
  276. package/src/propagator/RkCheckpoint.ts +25 -0
  277. package/src/propagator/RkResult.ts +26 -0
  278. package/src/propagator/RungeKutta4Propagator.ts +179 -0
  279. package/src/propagator/RungeKutta89Propagator.ts +132 -0
  280. package/src/propagator/RungeKuttaAdaptive.ts +232 -0
  281. package/src/propagator/Sgp4Propagator.ts +71 -0
  282. package/src/smoothing/ExponentialSmoothing.ts +90 -0
  283. package/src/transforms/index.ts +1 -0
  284. package/src/transforms/transforms.ts +117 -0
  285. package/src/types/types.ts +135 -0
  286. package/src/utils/index.ts +1 -0
  287. package/src/utils/jacobian.ts +38 -0
  288. package/.eslintrc.json +0 -244
  289. package/.prettierrc +0 -17
  290. package/babel.config.js +0 -16
  291. package/codecov.yml +0 -21
  292. package/dist/objects/base-object.d.ts +0 -40
  293. package/dist/objects/detailed-sat.d.ts +0 -66
  294. package/dist/objects/sat.d.ts +0 -92
  295. package/dist/objects/sensor.d.ts +0 -93
  296. package/dist/objects/star.d.ts +0 -46
  297. package/dist/ootk.js +0 -2
  298. package/dist/ootk.js.LICENSE.txt +0 -77
  299. package/dist/sgp4/sgp4.d.ts +0 -82
  300. package/dist/tle/tle-format-data.d.ts +0 -6
  301. package/dist/tle/tle.d.ts +0 -375
  302. package/dist/utils/constants.d.ts +0 -34
  303. package/dist/utils/moon-math.d.ts +0 -113
  304. package/dist/utils/sun-math.d.ts +0 -230
  305. package/dist/utils/utils.d.ts +0 -39
  306. package/jest.config.ts +0 -30
  307. package/lib/objects/base-object.d.ts +0 -40
  308. package/lib/objects/base-object.js +0 -79
  309. package/lib/objects/base-object.js.map +0 -1
  310. package/lib/objects/detailed-sat.js +0 -149
  311. package/lib/objects/detailed-sat.js.map +0 -1
  312. package/lib/objects/index.d.ts +0 -4
  313. package/lib/objects/index.js +0 -5
  314. package/lib/objects/index.js.map +0 -1
  315. package/lib/objects/sat.d.ts +0 -92
  316. package/lib/objects/sat.js +0 -188
  317. package/lib/objects/sat.js.map +0 -1
  318. package/lib/objects/sensor.d.ts +0 -93
  319. package/lib/objects/sensor.js +0 -273
  320. package/lib/objects/sensor.js.map +0 -1
  321. package/lib/objects/space-object.js +0 -60
  322. package/lib/objects/space-object.js.map +0 -1
  323. package/lib/objects/star.d.ts +0 -46
  324. package/lib/objects/star.js +0 -91
  325. package/lib/objects/star.js.map +0 -1
  326. package/lib/ootk.js.map +0 -1
  327. package/lib/sgp4/sgp4.d.ts +0 -82
  328. package/lib/sgp4/sgp4.js +0 -3262
  329. package/lib/sgp4/sgp4.js.map +0 -1
  330. package/lib/tle/tle-format-data.d.ts +0 -6
  331. package/lib/tle/tle-format-data.js +0 -10
  332. package/lib/tle/tle-format-data.js.map +0 -1
  333. package/lib/tle/tle.d.ts +0 -375
  334. package/lib/tle/tle.js +0 -611
  335. package/lib/tle/tle.js.map +0 -1
  336. package/lib/transforms/transforms.d.ts +0 -94
  337. package/lib/transforms/transforms.js +0 -308
  338. package/lib/transforms/transforms.js.map +0 -1
  339. package/lib/types/types.d.ts +0 -605
  340. package/lib/types/types.js +0 -36
  341. package/lib/types/types.js.map +0 -1
  342. package/lib/utils/constants.d.ts +0 -34
  343. package/lib/utils/constants.js +0 -35
  344. package/lib/utils/constants.js.map +0 -1
  345. package/lib/utils/moon-math.d.ts +0 -113
  346. package/lib/utils/moon-math.js +0 -387
  347. package/lib/utils/moon-math.js.map +0 -1
  348. package/lib/utils/sun-math.d.ts +0 -230
  349. package/lib/utils/sun-math.js +0 -422
  350. package/lib/utils/sun-math.js.map +0 -1
  351. package/lib/utils/utils.d.ts +0 -39
  352. package/lib/utils/utils.js +0 -102
  353. package/lib/utils/utils.js.map +0 -1
  354. package/sandbox.html +0 -8
  355. package/tsconfig.base.json +0 -31
  356. package/tsconfig.build.json +0 -14
  357. /package/{LICENSE.MD → LICENSE.md} +0 -0
@@ -0,0 +1,54 @@
1
+ /**
2
+ * @author @thkruz Theodore Kruczek
3
+ * @license AGPL-3.0-or-later
4
+ * @copyright (c) 2020-2024 Theodore Kruczek
5
+ *
6
+ * Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
7
+ * terms of the GNU Affero General Public License as published by the Free Software
8
+ * Foundation, either version 3 of the License, or (at your option) any later version.
9
+ *
10
+ * Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
11
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
+ * See the GNU Affero General Public License for more details.
13
+ *
14
+ * You should have received a copy of the GNU Affero General Public License along with
15
+ * Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
16
+ */
17
+ import { EpochUTC, J2000, Seconds } from 'ootk-core';
18
+ import { ForceModel } from '../force/ForceModel';
19
+ import { Thrust } from '../force/Thrust';
20
+ import { VerletBlendInterpolator } from './../interpolator/VerletBlendInterpolator';
21
+ import { Propagator } from './Propagator';
22
+ export declare abstract class RungeKuttaAdaptive extends Propagator {
23
+ private initState_;
24
+ private forceModel_;
25
+ private tolerance_;
26
+ /**
27
+ * Create a new [RungeKuttaAdaptive] object from an initial state vector
28
+ * along with an optional [ForceModel] and [tolerance].
29
+ * @param initState_ Initial state vector.
30
+ * @param forceModel_ Numerical integration force model.
31
+ * @param tolerance_ Minimum allowable local error tolerance.
32
+ */
33
+ constructor(initState_: J2000, forceModel_?: ForceModel, tolerance_?: number);
34
+ private _cacheState;
35
+ private readonly _checkpoints;
36
+ private _stepSize;
37
+ private static readonly _minTolerance;
38
+ protected abstract get a(): Float64Array;
39
+ protected abstract get b(): Float64Array[];
40
+ protected abstract get ch(): Float64Array;
41
+ protected abstract get c(): Float64Array;
42
+ protected abstract get order(): number;
43
+ get state(): J2000;
44
+ reset(): void;
45
+ setForceModel(forceModel: ForceModel): void;
46
+ private kfn_;
47
+ private integrate_;
48
+ propagate(epoch: EpochUTC): J2000;
49
+ maneuver(maneuver: Thrust, interval?: Seconds): J2000[];
50
+ ephemerisManeuver(start: EpochUTC, finish: EpochUTC, maneuvers: Thrust[], interval?: Seconds): VerletBlendInterpolator;
51
+ checkpoint(): number;
52
+ clearCheckpoints(): void;
53
+ restore(index: number): void;
54
+ }
@@ -0,0 +1,159 @@
1
+ /**
2
+ * @author @thkruz Theodore Kruczek
3
+ * @license AGPL-3.0-or-later
4
+ * @copyright (c) 2020-2024 Theodore Kruczek
5
+ *
6
+ * Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
7
+ * terms of the GNU Affero General Public License as published by the Free Software
8
+ * Foundation, either version 3 of the License, or (at your option) any later version.
9
+ *
10
+ * Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
11
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
+ * See the GNU Affero General Public License for more details.
13
+ *
14
+ * You should have received a copy of the GNU Affero General Public License along with
15
+ * Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
16
+ */
17
+ import { J2000, Vector } from 'ootk-core';
18
+ import { ForceModel } from '../force/ForceModel';
19
+ import { VerletBlendInterpolator } from './../interpolator/VerletBlendInterpolator';
20
+ import { Propagator } from './Propagator';
21
+ import { RkCheckpoint } from './RkCheckpoint';
22
+ import { RkResult } from './RkResult';
23
+ // / Adaptive Runge-Kutta propagator base class.
24
+ export class RungeKuttaAdaptive extends Propagator {
25
+ initState_;
26
+ forceModel_;
27
+ tolerance_;
28
+ /**
29
+ * Create a new [RungeKuttaAdaptive] object from an initial state vector
30
+ * along with an optional [ForceModel] and [tolerance].
31
+ * @param initState_ Initial state vector.
32
+ * @param forceModel_ Numerical integration force model.
33
+ * @param tolerance_ Minimum allowable local error tolerance.
34
+ */
35
+ constructor(initState_, forceModel_ = new ForceModel().setGravity(), tolerance_ = 1e-9) {
36
+ super();
37
+ this.initState_ = initState_;
38
+ this.forceModel_ = forceModel_;
39
+ this.tolerance_ = tolerance_;
40
+ this._cacheState = this.initState_;
41
+ this.tolerance_ = Math.max(RungeKuttaAdaptive._minTolerance, Math.abs(tolerance_));
42
+ }
43
+ // / Initial state vector.
44
+ _cacheState;
45
+ _checkpoints = [];
46
+ // / Integration step size _(seconds)_.
47
+ _stepSize = 60.0;
48
+ // / Minimum allowable local error tolerance.
49
+ static _minTolerance = 1e-15;
50
+ get state() {
51
+ return this._cacheState;
52
+ }
53
+ reset() {
54
+ this._cacheState = this.initState_;
55
+ this._stepSize = 60.0;
56
+ }
57
+ // / Set numerical integration force model.
58
+ setForceModel(forceModel) {
59
+ this.forceModel_ = forceModel;
60
+ }
61
+ kfn_(epoch, rv, hArg, kArg, step) {
62
+ const t = epoch.roll(hArg * step);
63
+ const rvNew = rv.add(kArg);
64
+ const sample = new J2000(t, rvNew.toVector3D(0), rvNew.toVector3D(3));
65
+ return this.forceModel_.derivative(sample).scale(step);
66
+ }
67
+ integrate_(state, step) {
68
+ const k = new Array(this.a.length).fill(Vector.origin3);
69
+ const y = state.position.join(state.velocity);
70
+ for (let i = 0; i < this.a.length; i++) {
71
+ let kArg = Vector.origin6;
72
+ if (i !== 0) {
73
+ for (let j = 0; j < i; j++) {
74
+ kArg = kArg.add(k[j].scale(this.b[i][j]));
75
+ }
76
+ }
77
+ k[i] = this.kfn_(state.epoch, y, this.a[i], kArg, step);
78
+ }
79
+ let y1 = y;
80
+ let y2 = y;
81
+ for (let i = 0; i < k.length; i++) {
82
+ y1 = y1.add(k[i].scale(this.ch[i]));
83
+ y2 = y2.add(k[i].scale(this.c[i]));
84
+ }
85
+ const teVal = y1.distance(y2);
86
+ let hNew = 0.9 * step * (this.tolerance_ / teVal) ** (1.0 / this.order);
87
+ const hOld = Math.abs(step);
88
+ hNew = Math.max(0.2 * hOld, Math.min(5.0 * hOld, hNew));
89
+ hNew = Math.max(1e-5, Math.min(1000.0, hNew));
90
+ return new RkResult(new J2000(state.epoch.roll(step), y1.toVector3D(0), y1.toVector3D(3)), teVal, hNew);
91
+ }
92
+ propagate(epoch) {
93
+ let delta = epoch.difference(this._cacheState.epoch);
94
+ while (delta !== 0) {
95
+ const direction = delta >= 0 ? 1 : -1;
96
+ const dt = Math.min(Math.abs(delta), this._stepSize) * direction;
97
+ const result = this.integrate_(this._cacheState, dt);
98
+ this._stepSize = result.newStep;
99
+ if (result.error > this.tolerance_) {
100
+ continue;
101
+ }
102
+ this._cacheState = result.state;
103
+ delta = epoch.difference(this._cacheState.epoch);
104
+ }
105
+ return this._cacheState;
106
+ }
107
+ maneuver(maneuver, interval = 60.0) {
108
+ if (maneuver.isImpulsive) {
109
+ this._cacheState = maneuver.apply(this.propagate(maneuver.center));
110
+ return [this._cacheState];
111
+ }
112
+ let tState = this.propagate(maneuver.start);
113
+ this.forceModel_.loadManeuver(maneuver);
114
+ const ephemeris = [tState];
115
+ while (tState.epoch < maneuver.stop) {
116
+ const step = Math.min(maneuver.stop.difference(tState.epoch), interval);
117
+ tState = this.propagate(tState.epoch.roll(step));
118
+ ephemeris.push(tState);
119
+ }
120
+ this.forceModel_.clearManeuver();
121
+ return ephemeris;
122
+ }
123
+ ephemerisManeuver(start, finish, maneuvers, interval = 60.0) {
124
+ const tMvr = maneuvers.filter((mvr) => mvr.start >= start || mvr.stop <= finish);
125
+ const ephemeris = [];
126
+ if (tMvr[0].start > start) {
127
+ ephemeris.push(this.propagate(start));
128
+ }
129
+ for (const mvr of tMvr) {
130
+ while (this._cacheState.epoch < mvr.start) {
131
+ const step = Math.min(mvr.start.difference(this._cacheState.epoch), interval);
132
+ this.propagate(this._cacheState.epoch.roll(step));
133
+ if (this._cacheState.epoch.posix !== mvr.start.posix) {
134
+ ephemeris.push(this._cacheState);
135
+ }
136
+ }
137
+ ephemeris.push(...this.maneuver(mvr, interval));
138
+ }
139
+ while (this._cacheState.epoch.posix < finish.posix) {
140
+ const step = Math.min(finish.difference(this._cacheState.epoch), interval);
141
+ this.propagate(this._cacheState.epoch.roll(step));
142
+ ephemeris.push(this._cacheState);
143
+ }
144
+ return new VerletBlendInterpolator(ephemeris);
145
+ }
146
+ checkpoint() {
147
+ this._checkpoints.push(new RkCheckpoint(this._cacheState, this._stepSize));
148
+ return this._checkpoints.length - 1;
149
+ }
150
+ clearCheckpoints() {
151
+ this._checkpoints.length = 0;
152
+ }
153
+ restore(index) {
154
+ const checkpoint = this._checkpoints[index];
155
+ this._cacheState = checkpoint.cacheState;
156
+ this._stepSize = checkpoint.stepSize;
157
+ }
158
+ }
159
+ //# sourceMappingURL=RungeKuttaAdaptive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RungeKuttaAdaptive.js","sourceRoot":"","sources":["../../src/propagator/RungeKuttaAdaptive.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * @author @thkruz Theodore Kruczek
3
+ * @license AGPL-3.0-or-later
4
+ * @copyright (c) 2020-2024 Theodore Kruczek
5
+ *
6
+ * Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
7
+ * terms of the GNU Affero General Public License as published by the Free Software
8
+ * Foundation, either version 3 of the License, or (at your option) any later version.
9
+ *
10
+ * Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
11
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
+ * See the GNU Affero General Public License for more details.
13
+ *
14
+ * You should have received a copy of the GNU Affero General Public License along with
15
+ * Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
16
+ */
17
+ import { EpochUTC, J2000, Tle } from 'ootk-core';
18
+ import { Thrust } from '../force/Thrust';
19
+ import { VerletBlendInterpolator } from '../interpolator/VerletBlendInterpolator';
20
+ import { Propagator } from './Propagator';
21
+ export declare class Sgp4Propagator extends Propagator {
22
+ private tle;
23
+ constructor(tle: Tle);
24
+ private _cacheState;
25
+ private _checkpoints;
26
+ get state(): J2000;
27
+ ephemerisManeuver(start: EpochUTC, finish: EpochUTC, maneuvers: Thrust[], interval?: number): VerletBlendInterpolator;
28
+ maneuver(maneuver: Thrust, interval?: number): J2000[];
29
+ propagate(epoch: EpochUTC): J2000;
30
+ reset(): void;
31
+ checkpoint(): number;
32
+ clearCheckpoints(): void;
33
+ restore(index: number): void;
34
+ }
@@ -0,0 +1,56 @@
1
+ /**
2
+ * @author @thkruz Theodore Kruczek
3
+ * @license AGPL-3.0-or-later
4
+ * @copyright (c) 2020-2024 Theodore Kruczek
5
+ *
6
+ * Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
7
+ * terms of the GNU Affero General Public License as published by the Free Software
8
+ * Foundation, either version 3 of the License, or (at your option) any later version.
9
+ *
10
+ * Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
11
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
+ * See the GNU Affero General Public License for more details.
13
+ *
14
+ * You should have received a copy of the GNU Affero General Public License along with
15
+ * Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
16
+ */
17
+ import { Propagator } from './Propagator';
18
+ // / SGP4 propagator.
19
+ export class Sgp4Propagator extends Propagator {
20
+ tle;
21
+ // / Create a new [Sgp4Propagator] object from a [TLE].
22
+ constructor(tle) {
23
+ super();
24
+ this.tle = tle;
25
+ this._cacheState = tle.state.toJ2000();
26
+ }
27
+ _cacheState;
28
+ _checkpoints = [];
29
+ get state() {
30
+ return this._cacheState;
31
+ }
32
+ ephemerisManeuver(start, finish, maneuvers, interval = 60.0) {
33
+ throw new Error('Maneuvers cannot be modelled with SGP4.');
34
+ }
35
+ maneuver(maneuver, interval = 60.0) {
36
+ throw new Error('Maneuvers cannot be modelled with SGP4.');
37
+ }
38
+ propagate(epoch) {
39
+ this._cacheState = this.tle.propagate(epoch).toJ2000();
40
+ return this._cacheState;
41
+ }
42
+ reset() {
43
+ this._cacheState = this.tle.state.toJ2000();
44
+ }
45
+ checkpoint() {
46
+ this._checkpoints.push(this._cacheState);
47
+ return this._checkpoints.length - 1;
48
+ }
49
+ clearCheckpoints() {
50
+ this._checkpoints = [];
51
+ }
52
+ restore(index) {
53
+ this._cacheState = this._checkpoints[index];
54
+ }
55
+ }
56
+ //# sourceMappingURL=Sgp4Propagator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Sgp4Propagator.js","sourceRoot":"","sources":["../../src/propagator/Sgp4Propagator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAOH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,qBAAqB;AACrB,MAAM,OAAO,cAAe,SAAQ,UAAU;IAExB;IADpB,uDAAuD;IACvD,YAAoB,GAAQ;QAC1B,KAAK,EAAE,CAAC;QADU,QAAG,GAAH,GAAG,CAAK;QAE1B,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IACzC,CAAC;IAEO,WAAW,CAAQ;IACnB,YAAY,GAAY,EAAE,CAAC;IAEnC,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,iBAAiB,CAAC,KAAe,EAAE,MAAgB,EAAE,SAAmB,EAAE,QAAQ,GAAG,IAAI;QACvF,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IAED,QAAQ,CAAC,QAAgB,EAAE,QAAQ,GAAG,IAAI;QACxC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IAED,SAAS,CAAC,KAAe;QACvB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;QAEvD,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IAC9C,CAAC;IAED,UAAU;QACR,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEzC,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IACtC,CAAC;IAED,gBAAgB;QACd,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;IACzB,CAAC;IAED,OAAO,CAAC,KAAa;QACnB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC;CACF"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @author @thkruz Theodore Kruczek
3
+ * @license AGPL-3.0-or-later
4
+ * @copyright (c) 2020-2024 Theodore Kruczek
5
+ *
6
+ * Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
7
+ * terms of the GNU Affero General Public License as published by the Free Software
8
+ * Foundation, either version 3 of the License, or (at your option) any later version.
9
+ *
10
+ * Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
11
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
+ * See the GNU Affero General Public License for more details.
13
+ *
14
+ * You should have received a copy of the GNU Affero General Public License along with
15
+ * Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
16
+ */
17
+ import { EpochUTC } from 'ootk-core';
18
+ export declare class ExponentialSmoothing {
19
+ private constructor();
20
+ static smooth(xs: number[], alpha: number): number[];
21
+ static smoothDouble(xs: number[], alpha: number, beta: number): number[];
22
+ static smoothTime(epochs: EpochUTC[], xs: number[], timeConstant: number): number[];
23
+ }
@@ -0,0 +1,81 @@
1
+ /**
2
+ * @author @thkruz Theodore Kruczek
3
+ * @license AGPL-3.0-or-later
4
+ * @copyright (c) 2020-2024 Theodore Kruczek
5
+ *
6
+ * Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
7
+ * terms of the GNU Affero General Public License as published by the Free Software
8
+ * Foundation, either version 3 of the License, or (at your option) any later version.
9
+ *
10
+ * Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
11
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
+ * See the GNU Affero General Public License for more details.
13
+ *
14
+ * You should have received a copy of the GNU Affero General Public License along with
15
+ * Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
16
+ */
17
+ // / Exponential data smoothing methods.
18
+ export class ExponentialSmoothing {
19
+ constructor() {
20
+ // disable constructor
21
+ }
22
+ /*
23
+ * Perform exponential smoothing on data set [xs] using the provided
24
+ * data smoothing factor [alpha] _(0.0 <= alpha <= 1.0)_.
25
+ */
26
+ static smooth(xs, alpha) {
27
+ const ss = [];
28
+ for (let i = 0; i < xs.length; i++) {
29
+ if (i === 0) {
30
+ ss.push(xs[0]);
31
+ }
32
+ else {
33
+ ss.push(alpha * xs[i] + (1 - alpha) * ss[i - 1]);
34
+ }
35
+ }
36
+ return ss;
37
+ }
38
+ /*
39
+ * Perform exponential smoothing on data set [xs] using the provided data
40
+ * smoothing factor [alpha] _(0.0 <= alpha <= 1.0)_ and trend smoothing
41
+ * factor [beta] _(0.0 <= beta <= 1.0)_.
42
+ */
43
+ static smoothDouble(xs, alpha, beta) {
44
+ const bs = [];
45
+ const ss = [];
46
+ for (let i = 0; i < xs.length; i++) {
47
+ if (i === 0) {
48
+ ss.push(xs[0]);
49
+ bs.push(xs[1] - xs[0]);
50
+ }
51
+ else {
52
+ ss.push(alpha * xs[i] + (1 - alpha) * (ss[i - 1] + bs[i - 1]));
53
+ bs.push(beta * (ss[i] - ss[i - 1]) + (1 - beta) * bs[i - 1]);
54
+ }
55
+ }
56
+ return ss;
57
+ }
58
+ /*
59
+ * Perform exponential smoothing on time series data set [xs] correlated
60
+ * with the [epochs] array using the provided [timeConstant]
61
+ * value _(seconds)_.
62
+ *
63
+ * Note: the [timeConstant] is the amount of time for the smoothed response
64
+ * of a unit step function to reach ~63.2% of the original signal.
65
+ */
66
+ static smoothTime(epochs, xs, timeConstant) {
67
+ const ts = epochs.map((e) => e.posix);
68
+ const ss = [];
69
+ for (let i = 0; i < xs.length; i++) {
70
+ if (i === 0) {
71
+ ss.push(xs[0]);
72
+ }
73
+ else {
74
+ const a = 1 - Math.exp(-(ts[i] - ts[i - 1]) / timeConstant);
75
+ ss.push(a * xs[i] + (1 - a) * ss[i - 1]);
76
+ }
77
+ }
78
+ return ss;
79
+ }
80
+ }
81
+ //# sourceMappingURL=ExponentialSmoothing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExponentialSmoothing.js","sourceRoot":"","sources":["../../src/smoothing/ExponentialSmoothing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,wCAAwC;AACxC,MAAM,OAAO,oBAAoB;IAC/B;QACE,sBAAsB;IACxB,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,MAAM,CAAC,EAAY,EAAE,KAAa;QACvC,MAAM,EAAE,GAAa,EAAE,CAAC;QAExB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAClC,IAAI,CAAC,KAAK,CAAC,EAAE;gBACX,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aAChB;iBAAM;gBACL,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aAClD;SACF;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,YAAY,CAAC,EAAY,EAAE,KAAa,EAAE,IAAY;QAC3D,MAAM,EAAE,GAAa,EAAE,CAAC;QACxB,MAAM,EAAE,GAAa,EAAE,CAAC;QAExB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAClC,IAAI,CAAC,KAAK,CAAC,EAAE;gBACX,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACf,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aACxB;iBAAM;gBACL,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/D,EAAE,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aAC9D;SACF;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,UAAU,CAAC,MAAkB,EAAE,EAAY,EAAE,YAAoB;QACtE,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,EAAE,GAAa,EAAE,CAAC;QAExB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAClC,IAAI,CAAC,KAAK,CAAC,EAAE;gBACX,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aAChB;iBAAM;gBACL,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC;gBAE5D,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aAC1C;SACF;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;CACF"}
@@ -0,0 +1 @@
1
+ export * from './transforms';
@@ -0,0 +1,2 @@
1
+ export * from './transforms';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transforms/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC"}
@@ -1,94 +1,58 @@
1
+ import { Degrees, EnuVec3, Radians, RaeVec3 } from 'ootk-core';
2
+ import { RfSensor } from 'src/objects/RfSensor';
3
+ import { RfVec3, RuvVec3 } from 'src/types/types';
1
4
  /**
2
- * @author Theodore Kruczek.
3
- * @description Orbital Object ToolKit (OOTK) is a collection of tools for working
4
- * with satellites and other orbital objects.
5
- *
6
- * @file The Transforms module contains a collection of conversions not contained
7
- * in the original SGP4 library such as ECI to ECF and ECF to RAE. This was based
8
- * on some of the functions in satellite.js.
9
- *
10
- * @license AGPL-3.0-or-later
11
- * @Copyright (c) 2020-2023 Theodore Kruczek
12
- *
13
- * Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
14
- * terms of the GNU Affero General Public License as published by the Free Software
15
- * Foundation, either version 3 of the License, or (at your option) any later version.
16
- *
17
- * Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
18
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
19
- * See the GNU Affero General Public License for more details.
20
- *
21
- * You should have received a copy of the GNU Affero General Public License along with
22
- * Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
5
+ * Converts Azimuth and Elevation to U and V.
6
+ * Azimuth is the angle off of boresight in the horizontal plane.
7
+ * Elevation is the angle off of boresight in the vertical plane.
8
+ * Cone half angle is the angle of the cone of the radar max field of view.
9
+ * @param az - Azimuth in radians
10
+ * @param el - Elevation in radians
11
+ * @param coneHalfAngle - Cone half angle in radians
12
+ * @returns U and V in radians
23
13
  */
24
- import { Degrees, EcefVec3, EcfVec3, EciVec3, EnuVec3, Kilometers, LlaVec3, RadarSensor, Radians, RaeVec3, RfVec3, RuvVec3, SezVec3 } from '../types/types';
25
- declare class Transforms {
26
- static getDegLat(radians: Radians): Degrees;
27
- static getDegLon(radians: Radians): Degrees;
28
- static getRadLat(degrees: Degrees): Radians;
29
- static getRadLon(degrees: Degrees): Radians;
30
- static rad2deg(radians: Radians): Degrees;
31
- static deg2rad(degrees: Degrees): Radians;
32
- static ecf2eci(ecf: EcfVec3, gmst: number): EciVec3;
33
- static ecf2rae(lla: LlaVec3, ecf: EcfVec3): RaeVec3;
34
- /**
35
- * EciToGeodetic converts eci coordinates to lla coordinates
36
- * @param {vec3} eci takes xyz coordinates
37
- * @param {number} gmst takes a number in gmst time
38
- * @returns {array} array containing lla coordinates
39
- */
40
- static eci2lla(eci: EciVec3, gmst: number): LlaVec3;
41
- static eci2ecf(eci: EciVec3, gmst: number): EcfVec3;
42
- static lla2ecf(lla: LlaVec3): EcfVec3;
43
- static lla2sez(lla: LlaVec3, ecf: EcfVec3): SezVec3;
44
- static rae2sez(rae: RaeVec3): SezVec3;
45
- static rae2ecf(rae: RaeVec3, lla: LlaVec3): EcfVec3;
46
- /**
47
- * @param {Object} sez Containing SEZ coordinates
48
- * @param {Number} sez.s Positive horizontal vector S due south.
49
- * @param {Number} sez.e Positive horizontal vector E due east.
50
- * @param {Number} sez.z Vector Z normal to the surface of the earth (up).
51
- * @returns {RaeVec3} Rng, Az, El array
52
- */
53
- static sez2rae(sez: SezVec3): RaeVec3;
54
- /**
55
- * Calculates Geodetic Lat Lon Alt to ECEF coordinates.
56
- */
57
- static lla2ecef(lla: LlaVec3): EcefVec3<Kilometers>;
58
- static ecf2enu(ecf: EcefVec3<Kilometers>, lla: LlaVec3): EnuVec3<Kilometers>;
59
- static rae2enu(rae: RaeVec3): EnuVec3<Kilometers>;
60
- static enu2rf({ x, y, z }: EnuVec3<Kilometers>, az: Radians, el: Radians): RfVec3;
61
- /**
62
- * Converts Azimuth and Elevation to U and V.
63
- * Azimuth is the angle off of boresight in the horizontal plane.
64
- * Elevation is the angle off of boresight in the vertical plane.
65
- * Cone half angle is the angle of the cone of the radar max field of view.
66
- */
67
- static azel2uv(az: Radians, el: Radians, coneHalfAngle: Radians): {
68
- u: Radians;
69
- v: Radians;
70
- };
71
- /**
72
- * Converts U and V to Azimuth and Elevation off of boresight.
73
- */
74
- static uv2azel(u: Radians, v: Radians, coneHalfAngle: Radians): {
75
- az: Radians;
76
- el: Radians;
77
- };
78
- /**
79
- * Converts Range Az El to Range U V.
80
- */
81
- static rae2ruv(rae: RaeVec3, sensor: RadarSensor, maxSensorAz: Degrees): RuvVec3;
82
- /**
83
- * Determine azimuth and elevation off of boresight based on sensor orientation and RAE.
84
- *
85
- * @param {rae} rae Range, Azimuth, Elevation
86
- * @param {RadarSensor} sensor Radar sensor object
87
- * @returns {az, el} Azimuth and Elevation off of boresight
88
- */
89
- static rae2raeOffBoresight(rae: RaeVec3, sensor: RadarSensor, maxSensorAz: Degrees): {
90
- az: Radians;
91
- el: Radians;
92
- };
93
- }
94
- export { Transforms };
14
+ export declare function azel2uv(az: Radians, el: Radians, coneHalfAngle: Radians): {
15
+ u: number;
16
+ v: number;
17
+ };
18
+ /**
19
+ * Determine azimuth and elevation off of boresight based on sensor orientation and RAE.
20
+ * @param rae Range, Azimuth, Elevation
21
+ * @param sensor Radar sensor object
22
+ * @param maxSensorAz Maximum sensor azimuth
23
+ * @returns Azimuth and Elevation off of boresight
24
+ */
25
+ export declare function rae2raeOffBoresight(rae: RaeVec3, sensor: RfSensor, maxSensorAz: Degrees): {
26
+ az: Radians;
27
+ el: Radians;
28
+ };
29
+ /**
30
+ * Converts Range Az El to Range U V.
31
+ * @param rae Range, Azimuth, Elevation
32
+ * @param sensor Radar sensor object
33
+ * @param maxSensorAz Maximum sensor azimuth
34
+ * @returns Range, U, V
35
+ */
36
+ export declare function rae2ruv(rae: RaeVec3, sensor: RfSensor, maxSensorAz: Degrees): RuvVec3;
37
+ /**
38
+ * Converts U and V to Azimuth and Elevation off of boresight.
39
+ * @param u The U coordinate.
40
+ * @param v The V coordinate.
41
+ * @param coneHalfAngle The cone half angle of the radar.
42
+ * @returns Azimuth and Elevation off of boresight.
43
+ */
44
+ export declare function uv2azel(u: number, v: number, coneHalfAngle: Radians): {
45
+ az: Radians;
46
+ el: Radians;
47
+ };
48
+ /**
49
+ * Converts coordinates from East-North-Up (ENU) to Right-Front-Up (RF) coordinate system.
50
+ * @param enu - The ENU coordinates to be converted.
51
+ * @param enu.x - The east coordinate.
52
+ * @param enu.y - The north coordinate.
53
+ * @param enu.z - The up coordinate.
54
+ * @param az - The azimuth angle in radians.
55
+ * @param el - The elevation angle in radians.
56
+ * @returns The converted RF coordinates.
57
+ */
58
+ export declare function enu2rf<D extends number, A extends number = Radians>({ x, y, z }: EnuVec3<D>, az: A, el: A): RfVec3<D>;