ootk 2.0.1 → 4.0.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 (262) hide show
  1. package/.eslintrc.json +14 -14
  2. package/CHANGELOG.md +122 -0
  3. package/README.md +27 -40
  4. package/jest.config.ts +30 -0
  5. package/lib/coordinate/Hill.d.ts +50 -0
  6. package/lib/coordinate/Hill.js +214 -0
  7. package/lib/coordinate/Hill.js.map +1 -0
  8. package/lib/coordinate/index.d.ts +1 -0
  9. package/lib/coordinate/index.js +2 -0
  10. package/lib/coordinate/index.js.map +1 -0
  11. package/lib/covariance/CovarianceSample.d.ts +44 -0
  12. package/lib/covariance/CovarianceSample.js +146 -0
  13. package/lib/covariance/CovarianceSample.js.map +1 -0
  14. package/lib/covariance/StateCovariance.d.ts +41 -0
  15. package/lib/covariance/StateCovariance.js +62 -0
  16. package/lib/covariance/StateCovariance.js.map +1 -0
  17. package/lib/force/AtmosphericDrag.d.ts +32 -0
  18. package/lib/force/AtmosphericDrag.js +66 -0
  19. package/lib/force/AtmosphericDrag.js.map +1 -0
  20. package/{dist/ootk.d.ts → lib/force/EarthGravity.d.ts} +13 -11
  21. package/lib/force/EarthGravity.js +115 -0
  22. package/lib/force/EarthGravity.js.map +1 -0
  23. package/lib/force/Force.d.ts +25 -0
  24. package/lib/force/Force.js +30 -0
  25. package/lib/force/Force.js.map +1 -0
  26. package/lib/force/ForceModel.d.ts +38 -0
  27. package/lib/force/ForceModel.js +71 -0
  28. package/lib/force/ForceModel.js.map +1 -0
  29. package/lib/force/Gravity.d.ts +41 -0
  30. package/lib/force/Gravity.js +48 -0
  31. package/lib/force/Gravity.js.map +1 -0
  32. package/lib/force/SolarRadiationPressure.d.ts +27 -0
  33. package/lib/force/SolarRadiationPressure.js +42 -0
  34. package/lib/force/SolarRadiationPressure.js.map +1 -0
  35. package/lib/force/ThirdBodyGravity.d.ts +27 -0
  36. package/lib/force/ThirdBodyGravity.js +56 -0
  37. package/lib/force/ThirdBodyGravity.js.map +1 -0
  38. package/lib/force/Thrust.d.ts +35 -0
  39. package/lib/force/Thrust.js +53 -0
  40. package/lib/force/Thrust.js.map +1 -0
  41. package/lib/interpolator/ChebyshevCoefficients.d.ts +54 -0
  42. package/lib/interpolator/ChebyshevCoefficients.js +90 -0
  43. package/lib/interpolator/ChebyshevCoefficients.js.map +1 -0
  44. package/lib/interpolator/ChebyshevInterpolator.d.ts +39 -0
  45. package/lib/interpolator/ChebyshevInterpolator.js +71 -0
  46. package/lib/interpolator/ChebyshevInterpolator.js.map +1 -0
  47. package/lib/interpolator/CubicSpline.d.ts +36 -0
  48. package/lib/interpolator/CubicSpline.js +64 -0
  49. package/lib/interpolator/CubicSpline.js.map +1 -0
  50. package/lib/interpolator/CubicSplineInterpolator.d.ts +37 -0
  51. package/lib/interpolator/CubicSplineInterpolator.js +78 -0
  52. package/lib/interpolator/CubicSplineInterpolator.js.map +1 -0
  53. package/lib/interpolator/FieldInterpolator.d.ts +26 -0
  54. package/lib/interpolator/FieldInterpolator.js +31 -0
  55. package/lib/interpolator/FieldInterpolator.js.map +1 -0
  56. package/lib/interpolator/Interpolator.d.ts +23 -0
  57. package/lib/interpolator/Interpolator.js +48 -0
  58. package/lib/interpolator/Interpolator.js.map +1 -0
  59. package/lib/interpolator/LagrangeInterpolator.d.ts +42 -0
  60. package/lib/interpolator/LagrangeInterpolator.js +156 -0
  61. package/lib/interpolator/LagrangeInterpolator.js.map +1 -0
  62. package/lib/interpolator/StateInterpolator.d.ts +29 -0
  63. package/lib/interpolator/StateInterpolator.js +37 -0
  64. package/lib/interpolator/StateInterpolator.js.map +1 -0
  65. package/lib/interpolator/VerletBlendInterpolator.d.ts +44 -0
  66. package/lib/interpolator/VerletBlendInterpolator.js +115 -0
  67. package/lib/interpolator/VerletBlendInterpolator.js.map +1 -0
  68. package/lib/maneuver/TwoBurnOrbitTransfer.d.ts +43 -0
  69. package/lib/maneuver/TwoBurnOrbitTransfer.js +62 -0
  70. package/lib/maneuver/TwoBurnOrbitTransfer.js.map +1 -0
  71. package/lib/maneuver/Waypoint.d.ts +66 -0
  72. package/lib/maneuver/Waypoint.js +152 -0
  73. package/lib/maneuver/Waypoint.js.map +1 -0
  74. package/lib/objects/DetailedSatellite.d.ts +94 -0
  75. package/lib/objects/DetailedSatellite.js +140 -0
  76. package/lib/objects/DetailedSatellite.js.map +1 -0
  77. package/lib/objects/DetailedSensor.d.ts +43 -0
  78. package/lib/objects/DetailedSensor.js +45 -0
  79. package/lib/objects/DetailedSensor.js.map +1 -0
  80. package/lib/objects/{space-object.d.ts → LandObject.d.ts} +19 -21
  81. package/lib/objects/LandObject.js +28 -0
  82. package/lib/objects/LandObject.js.map +1 -0
  83. package/lib/objects/Marker.d.ts +21 -0
  84. package/lib/objects/Marker.js +25 -0
  85. package/lib/objects/Marker.js.map +1 -0
  86. package/lib/objects/index.d.ts +5 -4
  87. package/lib/objects/index.js +5 -4
  88. package/lib/objects/index.js.map +1 -1
  89. package/lib/observation/Observation.d.ts +51 -0
  90. package/lib/observation/Observation.js +71 -0
  91. package/lib/observation/Observation.js.map +1 -0
  92. package/lib/observation/ObservationOptical.d.ts +47 -0
  93. package/lib/observation/ObservationOptical.js +101 -0
  94. package/lib/observation/ObservationOptical.js.map +1 -0
  95. package/lib/observation/ObservationRadar.d.ts +43 -0
  96. package/lib/observation/ObservationRadar.js +90 -0
  97. package/lib/observation/ObservationRadar.js.map +1 -0
  98. package/lib/observation/ObservationUtils.d.ts +21 -0
  99. package/lib/observation/ObservationUtils.js +33 -0
  100. package/lib/observation/ObservationUtils.js.map +1 -0
  101. package/lib/observation/PropagatorPairs.d.ts +31 -0
  102. package/lib/observation/PropagatorPairs.js +40 -0
  103. package/lib/observation/PropagatorPairs.js.map +1 -0
  104. package/lib/ootk.d.ts +10 -9
  105. package/lib/ootk.js +10 -9
  106. package/lib/ootk.js.map +1 -1
  107. package/lib/operations/BoxMuller.d.ts +41 -0
  108. package/lib/operations/BoxMuller.js +66 -0
  109. package/lib/operations/BoxMuller.js.map +1 -0
  110. package/lib/operations/EulerAngles.d.ts +50 -0
  111. package/lib/operations/EulerAngles.js +111 -0
  112. package/lib/operations/EulerAngles.js.map +1 -0
  113. package/lib/operations/Quaternion.d.ts +57 -0
  114. package/lib/operations/Quaternion.js +164 -0
  115. package/lib/operations/Quaternion.js.map +1 -0
  116. package/lib/operations/RandomGaussianSource.d.ts +25 -0
  117. package/lib/operations/RandomGaussianSource.js +43 -0
  118. package/lib/operations/RandomGaussianSource.js.map +1 -0
  119. package/lib/operations/index.d.ts +4 -0
  120. package/lib/operations/index.js +5 -0
  121. package/lib/operations/index.js.map +1 -0
  122. package/lib/optimize/ChebyshevCompressor.d.ts +31 -0
  123. package/lib/optimize/ChebyshevCompressor.js +80 -0
  124. package/lib/optimize/ChebyshevCompressor.js.map +1 -0
  125. package/lib/optimize/DownhillSimplex.d.ts +50 -0
  126. package/lib/optimize/DownhillSimplex.js +168 -0
  127. package/lib/optimize/DownhillSimplex.js.map +1 -0
  128. package/lib/optimize/GoldenSection.d.ts +33 -0
  129. package/lib/optimize/GoldenSection.js +49 -0
  130. package/lib/optimize/GoldenSection.js.map +1 -0
  131. package/lib/optimize/PolynomialRegression.d.ts +37 -0
  132. package/lib/optimize/PolynomialRegression.js +66 -0
  133. package/lib/optimize/PolynomialRegression.js.map +1 -0
  134. package/lib/optimize/PolynomicalRegressionResult.d.ts +28 -0
  135. package/lib/optimize/PolynomicalRegressionResult.js +32 -0
  136. package/lib/optimize/PolynomicalRegressionResult.js.map +1 -0
  137. package/lib/optimize/SimpleLinearRegression.d.ts +41 -0
  138. package/lib/optimize/SimpleLinearRegression.js +107 -0
  139. package/lib/optimize/SimpleLinearRegression.js.map +1 -0
  140. package/lib/optimize/SimplexEntry.d.ts +33 -0
  141. package/lib/optimize/SimplexEntry.js +39 -0
  142. package/lib/optimize/SimplexEntry.js.map +1 -0
  143. package/lib/orbit_determination/BatchLeastSquaresOD.d.ts +54 -0
  144. package/lib/orbit_determination/BatchLeastSquaresOD.js +118 -0
  145. package/lib/orbit_determination/BatchLeastSquaresOD.js.map +1 -0
  146. package/lib/orbit_determination/BatchLeastSquaresResult.d.ts +29 -0
  147. package/lib/orbit_determination/BatchLeastSquaresResult.js +31 -0
  148. package/lib/orbit_determination/BatchLeastSquaresResult.js.map +1 -0
  149. package/lib/orbit_determination/GibbsIOD.d.ts +33 -0
  150. package/lib/orbit_determination/GibbsIOD.js +70 -0
  151. package/lib/orbit_determination/GibbsIOD.js.map +1 -0
  152. package/lib/orbit_determination/GoodingIOD.d.ts +52 -0
  153. package/lib/orbit_determination/GoodingIOD.js +244 -0
  154. package/lib/orbit_determination/GoodingIOD.js.map +1 -0
  155. package/{dist/objects/space-object.d.ts → lib/orbit_determination/HerrickGibbsIOD.d.ts} +17 -22
  156. package/lib/orbit_determination/HerrickGibbsIOD.js +49 -0
  157. package/lib/orbit_determination/HerrickGibbsIOD.js.map +1 -0
  158. package/lib/orbit_determination/LambertIOD.d.ts +46 -0
  159. package/lib/orbit_determination/LambertIOD.js +199 -0
  160. package/lib/orbit_determination/LambertIOD.js.map +1 -0
  161. package/lib/orbit_determination/ModifiedGoodingIOD.d.ts +41 -0
  162. package/lib/orbit_determination/ModifiedGoodingIOD.js +82 -0
  163. package/lib/orbit_determination/ModifiedGoodingIOD.js.map +1 -0
  164. package/lib/propagator/DormandPrince54Propagator.d.ts +29 -0
  165. package/lib/propagator/DormandPrince54Propagator.js +68 -0
  166. package/lib/propagator/DormandPrince54Propagator.js.map +1 -0
  167. package/lib/propagator/KeplerPropagator.d.ts +36 -0
  168. package/lib/propagator/KeplerPropagator.js +81 -0
  169. package/lib/propagator/KeplerPropagator.js.map +1 -0
  170. package/lib/propagator/Propagator.d.ts +35 -0
  171. package/lib/propagator/Propagator.js +163 -0
  172. package/lib/propagator/Propagator.js.map +1 -0
  173. package/lib/propagator/RkCheckpoint.d.ts +23 -0
  174. package/lib/propagator/RkCheckpoint.js +26 -0
  175. package/lib/propagator/RkCheckpoint.js.map +1 -0
  176. package/lib/propagator/RkResult.d.ts +24 -0
  177. package/lib/propagator/RkResult.js +28 -0
  178. package/lib/propagator/RkResult.js.map +1 -0
  179. package/lib/propagator/RungeKutta4Propagator.d.ts +46 -0
  180. package/lib/propagator/RungeKutta4Propagator.js +132 -0
  181. package/lib/propagator/RungeKutta4Propagator.js.map +1 -0
  182. package/lib/propagator/RungeKutta89Propagator.d.ts +29 -0
  183. package/lib/propagator/RungeKutta89Propagator.js +130 -0
  184. package/lib/propagator/RungeKutta89Propagator.js.map +1 -0
  185. package/lib/propagator/RungeKuttaAdaptive.d.ts +52 -0
  186. package/lib/propagator/RungeKuttaAdaptive.js +152 -0
  187. package/lib/propagator/RungeKuttaAdaptive.js.map +1 -0
  188. package/lib/propagator/Sgp4Propagator.d.ts +35 -0
  189. package/lib/propagator/Sgp4Propagator.js +55 -0
  190. package/lib/propagator/Sgp4Propagator.js.map +1 -0
  191. package/lib/smoothing/ExponentialSmoothing.d.ts +24 -0
  192. package/lib/smoothing/ExponentialSmoothing.js +82 -0
  193. package/lib/smoothing/ExponentialSmoothing.js.map +1 -0
  194. package/lib/types/types.d.ts +68 -262
  195. package/lib/types/types.js +23 -33
  196. package/lib/types/types.js.map +1 -1
  197. package/package.json +28 -42
  198. package/codecov.yml +0 -21
  199. package/dist/objects/base-object.d.ts +0 -40
  200. package/dist/objects/detailed-sat.d.ts +0 -66
  201. package/dist/objects/index.d.ts +0 -4
  202. package/dist/objects/sat.d.ts +0 -92
  203. package/dist/objects/sensor.d.ts +0 -87
  204. package/dist/objects/star.d.ts +0 -46
  205. package/dist/ootk.js +0 -2
  206. package/dist/ootk.js.LICENSE.txt +0 -77
  207. package/dist/sgp4/Sgp4Assembly.d.ts +0 -5
  208. package/dist/sgp4/sgp4.d.ts +0 -82
  209. package/dist/tle/tle-format-data.d.ts +0 -6
  210. package/dist/tle/tle.d.ts +0 -374
  211. package/dist/transforms/transforms.d.ts +0 -55
  212. package/dist/types/types.d.ts +0 -280
  213. package/dist/utils/constants.d.ts +0 -34
  214. package/dist/utils/moon-math.d.ts +0 -113
  215. package/dist/utils/sun-math.d.ts +0 -230
  216. package/dist/utils/utils.d.ts +0 -39
  217. package/lib/objects/base-object.d.ts +0 -40
  218. package/lib/objects/base-object.js +0 -109
  219. package/lib/objects/base-object.js.map +0 -1
  220. package/lib/objects/detailed-sat.d.ts +0 -66
  221. package/lib/objects/detailed-sat.js +0 -149
  222. package/lib/objects/detailed-sat.js.map +0 -1
  223. package/lib/objects/sat.d.ts +0 -92
  224. package/lib/objects/sat.js +0 -188
  225. package/lib/objects/sat.js.map +0 -1
  226. package/lib/objects/sensor.d.ts +0 -87
  227. package/lib/objects/sensor.js +0 -255
  228. package/lib/objects/sensor.js.map +0 -1
  229. package/lib/objects/space-object.js +0 -60
  230. package/lib/objects/space-object.js.map +0 -1
  231. package/lib/objects/star.d.ts +0 -46
  232. package/lib/objects/star.js +0 -91
  233. package/lib/objects/star.js.map +0 -1
  234. package/lib/sgp4/Sgp4Assembly.d.ts +0 -5
  235. package/lib/sgp4/Sgp4Assembly.js +0 -75
  236. package/lib/sgp4/Sgp4Assembly.js.map +0 -1
  237. package/lib/sgp4/sgp4.d.ts +0 -82
  238. package/lib/sgp4/sgp4.js +0 -3274
  239. package/lib/sgp4/sgp4.js.map +0 -1
  240. package/lib/tle/tle-format-data.d.ts +0 -6
  241. package/lib/tle/tle-format-data.js +0 -10
  242. package/lib/tle/tle-format-data.js.map +0 -1
  243. package/lib/tle/tle.d.ts +0 -374
  244. package/lib/tle/tle.js +0 -611
  245. package/lib/tle/tle.js.map +0 -1
  246. package/lib/transforms/transforms.d.ts +0 -55
  247. package/lib/transforms/transforms.js +0 -209
  248. package/lib/transforms/transforms.js.map +0 -1
  249. package/lib/utils/constants.d.ts +0 -34
  250. package/lib/utils/constants.js +0 -35
  251. package/lib/utils/constants.js.map +0 -1
  252. package/lib/utils/moon-math.d.ts +0 -113
  253. package/lib/utils/moon-math.js +0 -387
  254. package/lib/utils/moon-math.js.map +0 -1
  255. package/lib/utils/sun-math.d.ts +0 -230
  256. package/lib/utils/sun-math.js +0 -422
  257. package/lib/utils/sun-math.js.map +0 -1
  258. package/lib/utils/utils.d.ts +0 -39
  259. package/lib/utils/utils.js +0 -100
  260. package/lib/utils/utils.js.map +0 -1
  261. package/sandbox.html +0 -8
  262. /package/{LICENSE.MD → LICENSE.md} +0 -0
@@ -0,0 +1,82 @@
1
+ /**
2
+ * @author @thkruz Theodore Kruczek
3
+ *
4
+ * @license AGPL-3.0-or-later
5
+ * @Copyright (c) 2020-2024 Theodore Kruczek
6
+ *
7
+ * Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
8
+ * terms of the GNU Affero General Public License as published by the Free Software
9
+ * Foundation, either version 3 of the License, or (at your option) any later version.
10
+ *
11
+ * Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
12
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13
+ * See the GNU Affero General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Affero General Public License along with
16
+ * Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
17
+ */
18
+ import { Earth, J2000, RadecTopocentric, Vector3D } from 'ootk-core';
19
+ import { ForceModel } from '../force/ForceModel';
20
+ import { RungeKutta89Propagator } from '../propagator/RungeKutta89Propagator';
21
+ import { DownhillSimplex } from './../optimize/DownhillSimplex';
22
+ import { GoodingIOD } from './GoodingIOD';
23
+ /**
24
+ * Gooding angles-only initial orbit determination.
25
+ *
26
+ * Used for orbit determination from multiple optical observations.
27
+ */
28
+ export class ModifiedGoodingIOD {
29
+ constructor(observations, mu = Earth.mu) {
30
+ this._observations = observations;
31
+ this._mu = mu;
32
+ }
33
+ _createInitial(r0, rN, nRev, direction) {
34
+ const iod = new GoodingIOD(this._observations[0], this._observations[Math.floor(this._observations.length / 2)], this._observations[this._observations.length - 1], this._mu);
35
+ return iod.solve(r0, rN, nRev, direction);
36
+ }
37
+ _createErrorFunction(aprioriEpoch) {
38
+ const forceModel = new ForceModel().setGravity(this._mu);
39
+ const scoreFn = (x) => {
40
+ const position = new Vector3D(x[0], x[1], x[2]);
41
+ const velocity = new Vector3D(x[3], x[4], x[5]);
42
+ const state = new J2000(aprioriEpoch, position, velocity);
43
+ const propagator = new RungeKutta89Propagator(state, forceModel);
44
+ let total = 0;
45
+ for (const oC of this._observations) {
46
+ const sC = propagator.propagate(oC.epoch);
47
+ const pC = oC.site;
48
+ const expected = oC.observation.lineOfSight();
49
+ const actual = RadecTopocentric.fromStateVectors(sC, pC).lineOfSight();
50
+ const error = expected.angle(actual);
51
+ total += error;
52
+ }
53
+ return total;
54
+ };
55
+ return scoreFn;
56
+ }
57
+ solve(r0, rN, { nRev = 0, direction = true, posSearch = 10.0, velSearch = 0.1, tolerance = 1e-6, printIter = false, }) {
58
+ if (this._observations.length < 3) {
59
+ throw new Error('At least 3 observations required for Gooding IOD.');
60
+ }
61
+ const init = this._createInitial(r0, rN, nRev, direction);
62
+ const guess = Float64Array.from([...init.position.toArray(), ...init.velocity.toArray()]);
63
+ const solveFn = this._createErrorFunction(init.epoch);
64
+ const simplex = [
65
+ Float64Array.from(guess),
66
+ Float64Array.from([guess[0] + posSearch, guess[1], guess[2], guess[3], guess[4], guess[5]]),
67
+ Float64Array.from([guess[0], guess[1] + posSearch, guess[2], guess[3], guess[4], guess[5]]),
68
+ Float64Array.from([guess[0], guess[1], guess[2] + posSearch, guess[3], guess[4], guess[5]]),
69
+ Float64Array.from([guess[0], guess[1], guess[2], guess[3] + velSearch, guess[4], guess[5]]),
70
+ Float64Array.from([guess[0], guess[1], guess[2], guess[3], guess[4] + velSearch, guess[5]]),
71
+ Float64Array.from([guess[0], guess[1], guess[2], guess[3], guess[4], guess[5] + velSearch]),
72
+ ];
73
+ const result = DownhillSimplex.solveSimplex(solveFn, simplex, {
74
+ adaptive: true,
75
+ xTolerance: tolerance,
76
+ fTolerance: tolerance,
77
+ printIter,
78
+ });
79
+ return new J2000(init.epoch, new Vector3D(result[0], result[1], result[2]), new Vector3D(result[3], result[4], result[5]));
80
+ }
81
+ }
82
+ //# sourceMappingURL=ModifiedGoodingIOD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModifiedGoodingIOD.js","sourceRoot":"","sources":["../../src/orbit_determination/ModifiedGoodingIOD.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * @author @thkruz Theodore Kruczek
3
+ *
4
+ * @license AGPL-3.0-or-later
5
+ * @Copyright (c) 2020-2024 Theodore Kruczek
6
+ *
7
+ * Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
8
+ * terms of the GNU Affero General Public License as published by the Free Software
9
+ * Foundation, either version 3 of the License, or (at your option) any later version.
10
+ *
11
+ * Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
12
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13
+ * See the GNU Affero General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Affero General Public License along with
16
+ * Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
17
+ */
18
+ import { RungeKuttaAdaptive } from './RungeKuttaAdaptive';
19
+ export declare class DormandPrince54Propagator extends RungeKuttaAdaptive {
20
+ private _a;
21
+ private _b;
22
+ private _ch;
23
+ private _c;
24
+ get a(): Float64Array;
25
+ get b(): Float64Array[];
26
+ get ch(): Float64Array;
27
+ get c(): Float64Array;
28
+ get order(): number;
29
+ }
@@ -0,0 +1,68 @@
1
+ /**
2
+ * @author @thkruz Theodore Kruczek
3
+ *
4
+ * @license AGPL-3.0-or-later
5
+ * @Copyright (c) 2020-2024 Theodore Kruczek
6
+ *
7
+ * Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
8
+ * terms of the GNU Affero General Public License as published by the Free Software
9
+ * Foundation, either version 3 of the License, or (at your option) any later version.
10
+ *
11
+ * Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
12
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13
+ * See the GNU Affero General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Affero General Public License along with
16
+ * Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
17
+ */
18
+ /* eslint-disable class-methods-use-this */
19
+ import { RungeKuttaAdaptive } from './RungeKuttaAdaptive';
20
+ export class DormandPrince54Propagator extends RungeKuttaAdaptive {
21
+ constructor() {
22
+ super(...arguments);
23
+ this._a = Float64Array.from([0.0, 1.0 / 5.0, 3.0 / 10.0, 4.0 / 5.0, 8.0 / 9.0, 1.0, 1.0]);
24
+ this._b = [
25
+ new Float64Array(),
26
+ Float64Array.from([1.0 / 5.0]),
27
+ Float64Array.from([3.0 / 40.0, 9.0 / 40.0]),
28
+ Float64Array.from([44.0 / 45.0, -56.0 / 15.0, 32.0 / 9.0]),
29
+ Float64Array.from([19372.0 / 6561.0, -25360.0 / 2187.0, 64448.0 / 6561.0, -212.0 / 729.0]),
30
+ Float64Array.from([9017.0 / 3168.0, -355.0 / 33.0, 46732.0 / 5247.0, 49.0 / 176.0, -5103.0 / 18656.0]),
31
+ Float64Array.from([35.0 / 384.0, 0.0, 500.0 / 1113.0, 125.0 / 192.0, -2187.0 / 6784.0, 11.0 / 84.0]),
32
+ ];
33
+ this._ch = Float64Array.from([
34
+ 35.0 / 384.0,
35
+ 0.0,
36
+ 500.0 / 1113.0,
37
+ 125.0 / 192.0,
38
+ -2187.0 / 6784.0,
39
+ 11.0 / 84.0,
40
+ 0.0,
41
+ ]);
42
+ this._c = Float64Array.from([
43
+ 5179.0 / 57600.0,
44
+ 0.0,
45
+ 7571.0 / 16695.0,
46
+ 393.0 / 640.0,
47
+ -92097.0 / 339200.0,
48
+ 187.0 / 2100.0,
49
+ 1.0 / 40.0,
50
+ ]);
51
+ }
52
+ get a() {
53
+ return this._a;
54
+ }
55
+ get b() {
56
+ return this._b;
57
+ }
58
+ get ch() {
59
+ return this._ch;
60
+ }
61
+ get c() {
62
+ return this._c;
63
+ }
64
+ get order() {
65
+ return 5;
66
+ }
67
+ }
68
+ //# sourceMappingURL=DormandPrince54Propagator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DormandPrince54Propagator.js","sourceRoot":"","sources":["../../src/propagator/DormandPrince54Propagator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,2CAA2C;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,OAAO,yBAA0B,SAAQ,kBAAkB;IAAjE;;QACU,OAAE,GAAiB,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,IAAI,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAEnG,OAAE,GAAmB;YAC3B,IAAI,YAAY,EAAE;YAClB,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;YAC9B,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC,CAAC;YAC3C,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC;YAC1D,YAAY,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,GAAG,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;YAC1F,YAAY,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,KAAK,GAAG,IAAI,EAAE,OAAO,GAAG,MAAM,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;YACtG,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,KAAK,EAAE,GAAG,EAAE,KAAK,GAAG,MAAM,EAAE,KAAK,GAAG,KAAK,EAAE,CAAC,MAAM,GAAG,MAAM,EAAE,IAAI,GAAG,IAAI,CAAC,CAAC;SACrG,CAAC;QAEM,QAAG,GAAiB,YAAY,CAAC,IAAI,CAAC;YAC5C,IAAI,GAAG,KAAK;YACZ,GAAG;YACH,KAAK,GAAG,MAAM;YACd,KAAK,GAAG,KAAK;YACb,CAAC,MAAM,GAAG,MAAM;YAChB,IAAI,GAAG,IAAI;YACX,GAAG;SACJ,CAAC,CAAC;QAEK,OAAE,GAAiB,YAAY,CAAC,IAAI,CAAC;YAC3C,MAAM,GAAG,OAAO;YAChB,GAAG;YACH,MAAM,GAAG,OAAO;YAChB,KAAK,GAAG,KAAK;YACb,CAAC,OAAO,GAAG,QAAQ;YACnB,KAAK,GAAG,MAAM;YACd,GAAG,GAAG,IAAI;SACX,CAAC,CAAC;IAqBL,CAAC;IAnBC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IAED,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IAED,IAAI,KAAK;QACP,OAAO,CAAC,CAAC;IACX,CAAC;CACF"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * @author @thkruz Theodore Kruczek
3
+ *
4
+ * @license AGPL-3.0-or-later
5
+ * @Copyright (c) 2020-2024 Theodore Kruczek
6
+ *
7
+ * Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
8
+ * terms of the GNU Affero General Public License as published by the Free Software
9
+ * Foundation, either version 3 of the License, or (at your option) any later version.
10
+ *
11
+ * Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
12
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13
+ * See the GNU Affero General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Affero General Public License along with
16
+ * Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
17
+ */
18
+ import { ClassicalElements, EpochUTC, J2000 } from 'ootk-core';
19
+ import { Thrust } from '../force/Thrust';
20
+ import { VerletBlendInterpolator } from '../interpolator/VerletBlendInterpolator';
21
+ import { Propagator } from './Propagator';
22
+ export declare class KeplerPropagator extends Propagator {
23
+ private _initElements;
24
+ private _elements;
25
+ private _cacheState;
26
+ private _checkpoints;
27
+ constructor(initElements: ClassicalElements);
28
+ get state(): J2000;
29
+ propagate(epoch: EpochUTC): J2000;
30
+ reset(): void;
31
+ maneuver(maneuver: Thrust, interval?: number): J2000[];
32
+ ephemerisManeuver(start: EpochUTC, finish: EpochUTC, maneuvers: Thrust[], interval?: number): VerletBlendInterpolator;
33
+ checkpoint(): number;
34
+ clearCheckpoints(): void;
35
+ restore(index: number): void;
36
+ }
@@ -0,0 +1,81 @@
1
+ /**
2
+ * @author @thkruz Theodore Kruczek
3
+ *
4
+ * @license AGPL-3.0-or-later
5
+ * @Copyright (c) 2020-2024 Theodore Kruczek
6
+ *
7
+ * Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
8
+ * terms of the GNU Affero General Public License as published by the Free Software
9
+ * Foundation, either version 3 of the License, or (at your option) any later version.
10
+ *
11
+ * Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
12
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13
+ * See the GNU Affero General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Affero General Public License along with
16
+ * Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
17
+ */
18
+ import { J2000 } from 'ootk-core';
19
+ import { VerletBlendInterpolator } from '../interpolator/VerletBlendInterpolator';
20
+ import { Propagator } from './Propagator';
21
+ // / Kepler analytical two-body propagator.
22
+ export class KeplerPropagator extends Propagator {
23
+ constructor(initElements) {
24
+ super();
25
+ this._initElements = initElements;
26
+ this._elements = initElements;
27
+ this._cacheState = J2000.fromClassicalElements(initElements);
28
+ this._checkpoints = [];
29
+ }
30
+ get state() {
31
+ return this._cacheState;
32
+ }
33
+ propagate(epoch) {
34
+ this._cacheState = J2000.fromClassicalElements(this._elements.propagate(epoch));
35
+ return this._cacheState;
36
+ }
37
+ reset() {
38
+ this._elements = this._initElements;
39
+ this._cacheState = J2000.fromClassicalElements(this._elements);
40
+ }
41
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
42
+ maneuver(maneuver, interval = 60) {
43
+ this._cacheState = maneuver.apply(this.propagate(maneuver.center));
44
+ this._elements = this._cacheState.toClassicalElements();
45
+ return [this._cacheState];
46
+ }
47
+ ephemerisManeuver(start, finish, maneuvers, interval = 60.0) {
48
+ const tMvr = maneuvers.slice(0).filter((mvr) => mvr.center >= start || mvr.center <= finish);
49
+ const ephemeris = [];
50
+ if (tMvr[0].start > start) {
51
+ ephemeris.push(this.propagate(start));
52
+ }
53
+ for (const mvr of tMvr) {
54
+ while (this._cacheState.epoch < mvr.center) {
55
+ const step = Math.min(mvr.center.difference(this._cacheState.epoch), interval);
56
+ this.propagate(this._cacheState.epoch.roll(step));
57
+ if (this._cacheState.epoch.posix !== mvr.center.posix) {
58
+ ephemeris.push(this._cacheState);
59
+ }
60
+ }
61
+ ephemeris.push(...this.maneuver(mvr, interval));
62
+ }
63
+ while (this._cacheState.epoch < finish) {
64
+ const step = Math.min(finish.difference(this._cacheState.epoch), interval);
65
+ this.propagate(this._cacheState.epoch.roll(step));
66
+ ephemeris.push(this._cacheState);
67
+ }
68
+ return new VerletBlendInterpolator(ephemeris);
69
+ }
70
+ checkpoint() {
71
+ this._checkpoints.push(this._cacheState);
72
+ return this._checkpoints.length - 1;
73
+ }
74
+ clearCheckpoints() {
75
+ this._checkpoints = [];
76
+ }
77
+ restore(index) {
78
+ this._cacheState = this._checkpoints[index];
79
+ }
80
+ }
81
+ //# sourceMappingURL=KeplerPropagator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KeplerPropagator.js","sourceRoot":"","sources":["../../src/propagator/KeplerPropagator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * @author @thkruz Theodore Kruczek
3
+ *
4
+ * @license AGPL-3.0-or-later
5
+ * @Copyright (c) 2020-2024 Theodore Kruczek
6
+ *
7
+ * Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
8
+ * terms of the GNU Affero General Public License as published by the Free Software
9
+ * Foundation, either version 3 of the License, or (at your option) any later version.
10
+ *
11
+ * Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
12
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13
+ * See the GNU Affero General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Affero General Public License along with
16
+ * Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
17
+ */
18
+ import { EpochUTC, J2000 } from 'ootk-core';
19
+ import { Thrust } from '../force/Thrust';
20
+ import { VerletBlendInterpolator } from '../interpolator/VerletBlendInterpolator';
21
+ export declare abstract class Propagator {
22
+ abstract propagate(epoch: EpochUTC): J2000;
23
+ ephemeris(start: EpochUTC, stop: EpochUTC, interval?: number): VerletBlendInterpolator;
24
+ abstract reset(): void;
25
+ abstract checkpoint(): number;
26
+ abstract restore(index: number): void;
27
+ abstract clearCheckpoints(): void;
28
+ abstract get state(): J2000;
29
+ maneuver(maneuver: Thrust, interval?: number): J2000[];
30
+ ephemerisManeuver(start: EpochUTC, finish: EpochUTC, maneuvers: Thrust[], interval?: number): VerletBlendInterpolator;
31
+ ascendingNodeEpoch(start: EpochUTC): EpochUTC;
32
+ descendingNodeEpoch(start: EpochUTC): EpochUTC;
33
+ apogeeEpoch(start: EpochUTC): EpochUTC;
34
+ perigeeEpoch(start: EpochUTC): EpochUTC;
35
+ }
@@ -0,0 +1,163 @@
1
+ /**
2
+ * @author @thkruz Theodore Kruczek
3
+ *
4
+ * @license AGPL-3.0-or-later
5
+ * @Copyright (c) 2020-2024 Theodore Kruczek
6
+ *
7
+ * Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
8
+ * terms of the GNU Affero General Public License as published by the Free Software
9
+ * Foundation, either version 3 of the License, or (at your option) any later version.
10
+ *
11
+ * Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
12
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13
+ * See the GNU Affero General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Affero General Public License along with
16
+ * Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
17
+ */
18
+ import { EpochUTC } from 'ootk-core';
19
+ import { VerletBlendInterpolator } from '../interpolator/VerletBlendInterpolator';
20
+ import { GoldenSection } from './../optimize/GoldenSection';
21
+ // Propagator base class.
22
+ export class Propagator {
23
+ /*
24
+ * Generate a [VerletBlendInterpolator] containing ephemeris over the
25
+ * [start] and [stop] propagation period, with an optional
26
+ * ephemeris [interval].
27
+ */
28
+ ephemeris(start, stop, interval = 60.0) {
29
+ const output = [this.propagate(start)];
30
+ let tempEpoch = start;
31
+ while (tempEpoch <= stop) {
32
+ tempEpoch = tempEpoch.roll(interval);
33
+ output.push(this.propagate(tempEpoch));
34
+ }
35
+ return new VerletBlendInterpolator(output);
36
+ }
37
+ /*
38
+ * Generate a list of [J2000] states integrating over a maneuver.
39
+ *
40
+ * If the maneuver is impulsive, the list will only contain a single state.
41
+ */
42
+ maneuver(maneuver, interval = 60.0) {
43
+ const output = [];
44
+ const tempEpoch = maneuver.start;
45
+ const stop = maneuver.stop;
46
+ output.push(this.propagate(tempEpoch));
47
+ let current = tempEpoch;
48
+ while (current <= stop) {
49
+ current = current.roll(interval);
50
+ output.push(this.propagate(current));
51
+ }
52
+ return output;
53
+ }
54
+ /*
55
+ * Generate a [VerletBlendInterpolator] containing maneuver ephemeris over
56
+ * the [start] and [finish] interval, with an optional ephemeris [interval].
57
+ */
58
+ ephemerisManeuver(start, finish, maneuvers, interval = 60.0) {
59
+ const output = [];
60
+ const tempEpoch = start;
61
+ output.push(this.propagate(tempEpoch));
62
+ const stop = finish;
63
+ let current = tempEpoch;
64
+ while (current <= stop) {
65
+ current = current.roll(interval);
66
+ output.push(this.propagate(current));
67
+ }
68
+ return new VerletBlendInterpolator(output);
69
+ }
70
+ // Return the epoch of the ascending node after the [start] epoch.
71
+ ascendingNodeEpoch(start) {
72
+ const period = this.state.period();
73
+ const step = period / 8;
74
+ let current = start;
75
+ const stop = current.roll(period);
76
+ this.propagate(current);
77
+ let previous = this.state.position.z;
78
+ while (current <= stop) {
79
+ current = current.roll(step);
80
+ this.propagate(current);
81
+ if (Math.sign(this.state.position.z) === Math.sign(-previous) && this.state.velocity.z > 0) {
82
+ break;
83
+ }
84
+ previous = this.state.position.z;
85
+ }
86
+ const t = GoldenSection.search((x) => {
87
+ this.propagate(new EpochUTC(x));
88
+ return Math.abs(this.state.position.z);
89
+ }, current.posix - step, current.posix, { tolerance: 1e-3 });
90
+ return new EpochUTC(t);
91
+ }
92
+ // Return the epoch of the descending node after the [start] epoch.
93
+ descendingNodeEpoch(start) {
94
+ const period = this.state.period();
95
+ const step = period / 8;
96
+ let current = start;
97
+ const stop = current.roll(period);
98
+ this.propagate(current);
99
+ let previous = this.state.position.z;
100
+ while (current <= stop) {
101
+ current = current.roll(step);
102
+ this.propagate(current);
103
+ if (Math.sign(this.state.position.z) === Math.sign(-previous) && this.state.velocity.z < 0) {
104
+ break;
105
+ }
106
+ previous = this.state.position.z;
107
+ }
108
+ const t = GoldenSection.search((x) => {
109
+ this.propagate(new EpochUTC(x));
110
+ return Math.abs(this.state.position.z);
111
+ }, current.posix - step, current.posix, { tolerance: 1e-3 });
112
+ return new EpochUTC(t);
113
+ }
114
+ // Return the epoch of apogee after the [start] epoch.
115
+ apogeeEpoch(start) {
116
+ const slice = 8;
117
+ const period = this.state.period();
118
+ const step = period / slice;
119
+ let current = start;
120
+ this.propagate(current);
121
+ let tCache = current;
122
+ let rCache = this.state.position.magnitude();
123
+ for (let i = 0; i < slice; i++) {
124
+ current = current.roll(step);
125
+ const t = new EpochUTC(GoldenSection.search((x) => {
126
+ this.propagate(new EpochUTC(x));
127
+ return this.state.position.magnitude();
128
+ }, current.posix - step, current.posix, { tolerance: 1e-3, solveMax: true }));
129
+ this.propagate(t);
130
+ const r = this.state.position.magnitude();
131
+ if (r > rCache) {
132
+ tCache = t;
133
+ rCache = r;
134
+ }
135
+ }
136
+ return tCache;
137
+ }
138
+ // Return the epoch of perigee after the [start] epoch.
139
+ perigeeEpoch(start) {
140
+ const slice = 8;
141
+ const period = this.state.period();
142
+ const step = period / slice;
143
+ let current = start;
144
+ this.propagate(current);
145
+ let tCache = current;
146
+ let rCache = this.state.position.magnitude();
147
+ for (let i = 0; i < slice; i++) {
148
+ current = current.roll(step);
149
+ const t = new EpochUTC(GoldenSection.search((x) => {
150
+ this.propagate(new EpochUTC(x));
151
+ return this.state.position.magnitude();
152
+ }, current.posix - step, current.posix, { tolerance: 1e-3, solveMax: false }));
153
+ this.propagate(t);
154
+ const r = this.state.position.magnitude();
155
+ if (r < rCache) {
156
+ tCache = t;
157
+ rCache = r;
158
+ }
159
+ }
160
+ return tCache;
161
+ }
162
+ }
163
+ //# sourceMappingURL=Propagator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Propagator.js","sourceRoot":"","sources":["../../src/propagator/Propagator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @author @thkruz Theodore Kruczek
3
+ *
4
+ * @license AGPL-3.0-or-later
5
+ * @Copyright (c) 2020-2024 Theodore Kruczek
6
+ *
7
+ * Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
8
+ * terms of the GNU Affero General Public License as published by the Free Software
9
+ * Foundation, either version 3 of the License, or (at your option) any later version.
10
+ *
11
+ * Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
12
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13
+ * See the GNU Affero General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Affero General Public License along with
16
+ * Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
17
+ */
18
+ import { J2000 } from 'ootk-core';
19
+ export declare class RkCheckpoint {
20
+ cacheState: J2000;
21
+ stepSize: number;
22
+ constructor(cacheState: J2000, stepSize: number);
23
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * @author @thkruz Theodore Kruczek
3
+ *
4
+ * @license AGPL-3.0-or-later
5
+ * @Copyright (c) 2020-2024 Theodore Kruczek
6
+ *
7
+ * Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
8
+ * terms of the GNU Affero General Public License as published by the Free Software
9
+ * Foundation, either version 3 of the License, or (at your option) any later version.
10
+ *
11
+ * Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
12
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13
+ * See the GNU Affero General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Affero General Public License along with
16
+ * Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
17
+ */
18
+ // / Runge-Kutta adaptive state checkpoint.
19
+ export class RkCheckpoint {
20
+ constructor(cacheState, stepSize) {
21
+ this.cacheState = cacheState;
22
+ this.stepSize = stepSize;
23
+ // Nothing to do here.
24
+ }
25
+ }
26
+ //# sourceMappingURL=RkCheckpoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RkCheckpoint.js","sourceRoot":"","sources":["../../src/propagator/RkCheckpoint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,2CAA2C;AAC3C,MAAM,OAAO,YAAY;IACvB,YAAmB,UAAiB,EAAS,QAAgB;QAA1C,eAAU,GAAV,UAAU,CAAO;QAAS,aAAQ,GAAR,QAAQ,CAAQ;QAC3D,sBAAsB;IACxB,CAAC;CACF"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * @author @thkruz Theodore Kruczek
3
+ *
4
+ * @license AGPL-3.0-or-later
5
+ * @Copyright (c) 2020-2024 Theodore Kruczek
6
+ *
7
+ * Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
8
+ * terms of the GNU Affero General Public License as published by the Free Software
9
+ * Foundation, either version 3 of the License, or (at your option) any later version.
10
+ *
11
+ * Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
12
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13
+ * See the GNU Affero General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Affero General Public License along with
16
+ * Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
17
+ */
18
+ import { J2000 } from 'ootk-core';
19
+ export declare class RkResult {
20
+ state: J2000;
21
+ error: number;
22
+ newStep: number;
23
+ constructor(state: J2000, error: number, newStep: number);
24
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * @author @thkruz Theodore Kruczek
3
+ *
4
+ * @license AGPL-3.0-or-later
5
+ * @Copyright (c) 2020-2024 Theodore Kruczek
6
+ *
7
+ * Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
8
+ * terms of the GNU Affero General Public License as published by the Free Software
9
+ * Foundation, either version 3 of the License, or (at your option) any later version.
10
+ *
11
+ * Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
12
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13
+ * See the GNU Affero General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Affero General Public License along with
16
+ * Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
17
+ */
18
+ // / Result of adaptive numerical integration.
19
+ export class RkResult {
20
+ // / Create a new [RkResult] object.
21
+ constructor(state, error, newStep) {
22
+ this.state = state;
23
+ this.error = error;
24
+ this.newStep = newStep;
25
+ // Nothing to do here.
26
+ }
27
+ }
28
+ //# sourceMappingURL=RkResult.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RkResult.js","sourceRoot":"","sources":["../../src/propagator/RkResult.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,8CAA8C;AAC9C,MAAM,OAAO,QAAQ;IACnB,oCAAoC;IACpC,YAAmB,KAAY,EAAS,KAAa,EAAS,OAAe;QAA1D,UAAK,GAAL,KAAK,CAAO;QAAS,UAAK,GAAL,KAAK,CAAQ;QAAS,YAAO,GAAP,OAAO,CAAQ;QAC3E,sBAAsB;IACxB,CAAC;CACF"}