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,156 @@
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, EpochWindow, J2000, Vector3D } from 'ootk-core';
19
+ import { StateInterpolator } from './StateInterpolator';
20
+ export class LagrangeInterpolator extends StateInterpolator {
21
+ constructor(t, x, y, z, order = 10) {
22
+ super();
23
+ this._t = t;
24
+ this._x = x;
25
+ this._y = y;
26
+ this._z = z;
27
+ this.order = order;
28
+ }
29
+ /**
30
+ * Creates a LagrangeInterpolator from an array of J2000 ephemeris data.
31
+ *
32
+ * @param ephemeris - The array of J2000 ephemeris data.
33
+ * @param order - The order of the LagrangeInterpolator. Default is 10.
34
+ * @returns A new LagrangeInterpolator instance.
35
+ */
36
+ static fromEphemeris(ephemeris, order = 10) {
37
+ const k = ephemeris.length;
38
+ const t = new Float64Array(k);
39
+ const x = new Float64Array(k);
40
+ const y = new Float64Array(k);
41
+ const z = new Float64Array(k);
42
+ for (let i = 0; i < k; i++) {
43
+ const state = ephemeris[i];
44
+ t[i] = state.epoch.posix;
45
+ x[i] = state.position.x;
46
+ y[i] = state.position.y;
47
+ z[i] = state.position.z;
48
+ }
49
+ return new LagrangeInterpolator(t, x, y, z, order);
50
+ }
51
+ get sizeBytes() {
52
+ return (64 * 4 * this._t.length) / 8;
53
+ }
54
+ interpolate(epoch) {
55
+ if (!this.inWindow(epoch)) {
56
+ return null;
57
+ }
58
+ const posix = epoch.posix;
59
+ const subDex = this._slice(posix);
60
+ const start = subDex.left;
61
+ const stop = subDex.right;
62
+ const ts = this._t.subarray(start, stop);
63
+ const xs = this._x.subarray(start, stop);
64
+ const ys = this._y.subarray(start, stop);
65
+ const zs = this._z.subarray(start, stop);
66
+ const position = new Vector3D(LagrangeInterpolator._position(ts, xs, posix), LagrangeInterpolator._position(ts, ys, posix), LagrangeInterpolator._position(ts, zs, posix));
67
+ const velocity = new Vector3D(LagrangeInterpolator._velocity(ts, xs, posix), LagrangeInterpolator._velocity(ts, ys, posix), LagrangeInterpolator._velocity(ts, zs, posix));
68
+ return new J2000(epoch, position, velocity);
69
+ }
70
+ static _position(xs, ys, x) {
71
+ const k = xs.length - 1;
72
+ let result = 0.0;
73
+ for (let j = 0; j < k; j++) {
74
+ let product = ys[j];
75
+ for (let m = 0; m < k; m++) {
76
+ if (j === m) {
77
+ continue;
78
+ }
79
+ product *= (x - xs[m]) / (xs[j] - xs[m]);
80
+ }
81
+ result += product;
82
+ }
83
+ return result;
84
+ }
85
+ static _velocity(xs, ys, x) {
86
+ const k = xs.length;
87
+ let result = 0.0;
88
+ for (let j = 0; j < k; j++) {
89
+ let total = 0.0;
90
+ for (let i = 0; i < k; i++) {
91
+ if (i === j) {
92
+ continue;
93
+ }
94
+ let product = 1 / (xs[j] - xs[i]);
95
+ for (let m = 0; m < k; m++) {
96
+ if (m === i || m === j) {
97
+ continue;
98
+ }
99
+ product *= (x - xs[m]) / (xs[j] - xs[m]);
100
+ }
101
+ total += product;
102
+ }
103
+ result += ys[j] * total;
104
+ }
105
+ return result;
106
+ }
107
+ static _getClosest(target, t1, d1, t2, d2) {
108
+ return target - t1 >= t2 - target ? d2 : d1;
109
+ }
110
+ _slice(posix) {
111
+ const n = this._t.length;
112
+ if (posix <= this._t[0]) {
113
+ return { left: 0, right: this.order };
114
+ }
115
+ if (posix >= this._t[n - 1]) {
116
+ return { left: n - this.order, right: n };
117
+ }
118
+ let i = 0;
119
+ let j = this._t.length;
120
+ let mid = 0;
121
+ while (i < j) {
122
+ mid = (i + j) >> 1;
123
+ if (this._t[mid] === posix) {
124
+ break;
125
+ }
126
+ if (posix < this._t[mid]) {
127
+ if (mid > 0 && posix > this._t[mid - 1]) {
128
+ mid = LagrangeInterpolator._getClosest(posix, this._t[mid - 1], mid - 1, this._t[mid], mid);
129
+ break;
130
+ }
131
+ j = mid;
132
+ }
133
+ else {
134
+ if (mid < this._t.length - 1 && posix < this._t[mid + 1]) {
135
+ mid = LagrangeInterpolator._getClosest(posix, this._t[mid], mid, this._t[mid + 1], mid + 1);
136
+ break;
137
+ }
138
+ i = mid + 1;
139
+ }
140
+ }
141
+ const offset = Math.floor(this.order / 2);
142
+ const left = mid - offset;
143
+ const right = mid + offset - (this.order % 2 === 1 ? 1 : 0);
144
+ if (left < 0) {
145
+ return { left: 0, right: this.order };
146
+ }
147
+ if (right > n) {
148
+ return { left: n - this.order, right: n };
149
+ }
150
+ return { left, right };
151
+ }
152
+ window() {
153
+ return new EpochWindow(new EpochUTC(this._t[0]), new EpochUTC(this._t[this._t.length - 1]));
154
+ }
155
+ }
156
+ //# sourceMappingURL=LagrangeInterpolator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LagrangeInterpolator.js","sourceRoot":"","sources":["../../src/interpolator/LagrangeInterpolator.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 { EpochUTC, J2000 } from 'ootk-core';
19
+ import { Interpolator } from './Interpolator';
20
+ export declare abstract class StateInterpolator extends Interpolator {
21
+ /**
22
+ * Interpolates the state at the given epoch.
23
+ *
24
+ * @param epoch The epoch in UTC format.
25
+ * @returns The interpolated state at the given epoch, or null if interpolation is not possible.
26
+ */
27
+ interpolate(epoch: EpochUTC): J2000 | null;
28
+ get sizeBytes(): number;
29
+ }
@@ -0,0 +1,37 @@
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 @typescript-eslint/no-unused-vars */
19
+ /* eslint-disable class-methods-use-this */
20
+ import { Interpolator } from './Interpolator';
21
+ // / Base class for state vector interpolators.
22
+ export class StateInterpolator extends Interpolator {
23
+ /**
24
+ * Interpolates the state at the given epoch.
25
+ *
26
+ * @param epoch The epoch in UTC format.
27
+ * @returns The interpolated state at the given epoch, or null if interpolation is not possible.
28
+ */
29
+ interpolate(epoch) {
30
+ throw new Error('Not implemented.');
31
+ }
32
+ // / Return the size _(bytes)_ of this interpolator's cached data.
33
+ get sizeBytes() {
34
+ throw new Error('Not implemented.');
35
+ }
36
+ }
37
+ //# sourceMappingURL=StateInterpolator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StateInterpolator.js","sourceRoot":"","sources":["../../src/interpolator/StateInterpolator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,sDAAsD;AACtD,2CAA2C;AAE3C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,+CAA+C;AAC/C,MAAM,OAAgB,iBAAkB,SAAQ,YAAY;IAC1D;;;;;OAKG;IACH,WAAW,CAAC,KAAe;QACzB,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACtC,CAAC;IAED,kEAAkE;IAClE,IAAI,SAAS;QACX,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACtC,CAAC;CACF"}
@@ -0,0 +1,44 @@
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, EpochWindow, J2000 } from 'ootk-core';
19
+ import { CubicSplineInterpolator } from './CubicSplineInterpolator';
20
+ import { LagrangeInterpolator } from './LagrangeInterpolator';
21
+ import { StateInterpolator } from './StateInterpolator';
22
+ /**
23
+ * Two-body Velocity Verlet Blend interpolator.
24
+ *
25
+ * The [VerletBlendInterpolator] retains the original ephemerides, so the
26
+ * original _"truth"_ states can be retrieved if needed without imparting any
27
+ * additional error, so this can be used to build other interpolator types.
28
+ * The implementation is simple and very tolerant when working with sparse
29
+ * ephemerides.
30
+ */
31
+ export declare class VerletBlendInterpolator extends StateInterpolator {
32
+ ephemeris: J2000[];
33
+ constructor(ephemeris: J2000[]);
34
+ get sizeBytes(): number;
35
+ window(): EpochWindow;
36
+ private static _getClosest;
37
+ private _matchState;
38
+ private static _gravity;
39
+ private static _integrate;
40
+ interpolate(epoch: EpochUTC): J2000 | null;
41
+ getCachedState(epoch: EpochUTC): J2000 | null;
42
+ toCubicSpline(): CubicSplineInterpolator;
43
+ toLagrange(order?: number): LagrangeInterpolator;
44
+ }
@@ -0,0 +1,115 @@
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 { copySign, Earth, EpochWindow, J2000 } from 'ootk-core';
19
+ import { CubicSplineInterpolator } from './CubicSplineInterpolator';
20
+ import { LagrangeInterpolator } from './LagrangeInterpolator';
21
+ import { StateInterpolator } from './StateInterpolator';
22
+ /**
23
+ * Two-body Velocity Verlet Blend interpolator.
24
+ *
25
+ * The [VerletBlendInterpolator] retains the original ephemerides, so the
26
+ * original _"truth"_ states can be retrieved if needed without imparting any
27
+ * additional error, so this can be used to build other interpolator types.
28
+ * The implementation is simple and very tolerant when working with sparse
29
+ * ephemerides.
30
+ */
31
+ export class VerletBlendInterpolator extends StateInterpolator {
32
+ constructor(ephemeris) {
33
+ super();
34
+ this.ephemeris = ephemeris;
35
+ }
36
+ get sizeBytes() {
37
+ return (64 * 7 * this.ephemeris.length) / 8;
38
+ }
39
+ window() {
40
+ return new EpochWindow(this.ephemeris[0].epoch, this.ephemeris[this.ephemeris.length - 1].epoch);
41
+ }
42
+ static _getClosest(target, s1, s2) {
43
+ return target - s1.epoch.posix >= s2.epoch.posix - target ? s2 : s1;
44
+ }
45
+ _matchState(epoch) {
46
+ const target = epoch.posix;
47
+ if (target <= this.ephemeris[0].epoch.posix) {
48
+ return this.ephemeris[0];
49
+ }
50
+ if (target >= this.ephemeris[this.ephemeris.length - 1].epoch.posix) {
51
+ return this.ephemeris[this.ephemeris.length - 1];
52
+ }
53
+ let i = 0;
54
+ let j = this.ephemeris.length;
55
+ let mid = 0;
56
+ while (i < j) {
57
+ mid = (i + j) >> 1;
58
+ if (this.ephemeris[mid].epoch.posix === target) {
59
+ return this.ephemeris[mid];
60
+ }
61
+ if (target < this.ephemeris[mid].epoch.posix) {
62
+ if (mid > 0 && target > this.ephemeris[mid - 1].epoch.posix) {
63
+ return VerletBlendInterpolator._getClosest(target, this.ephemeris[mid - 1], this.ephemeris[mid]);
64
+ }
65
+ j = mid;
66
+ }
67
+ else {
68
+ if (mid < this.ephemeris.length - 1 && target < this.ephemeris[mid + 1].epoch.posix) {
69
+ return VerletBlendInterpolator._getClosest(target, this.ephemeris[mid], this.ephemeris[mid + 1]);
70
+ }
71
+ i = mid + 1;
72
+ }
73
+ }
74
+ return this.ephemeris[mid];
75
+ }
76
+ static _gravity(position) {
77
+ const r = position.magnitude();
78
+ return position.scale(-Earth.mu / (r * r * r));
79
+ }
80
+ static _integrate(state, step) {
81
+ const x0 = state.position;
82
+ const a0 = VerletBlendInterpolator._gravity(x0);
83
+ const v0 = state.velocity;
84
+ const x1 = x0.add(v0.scale(step)).add(a0.scale(0.5 * step * step));
85
+ const a1 = VerletBlendInterpolator._gravity(x1);
86
+ const v1 = v0.add(a0.add(a1).scale(0.5 * step));
87
+ return new J2000(state.epoch.roll(step), x1, v1);
88
+ }
89
+ interpolate(epoch) {
90
+ if (!this.inWindow(epoch)) {
91
+ return null;
92
+ }
93
+ let state = this._matchState(epoch);
94
+ while (state.epoch.posix !== epoch.posix) {
95
+ const delta = epoch.posix - state.epoch.posix;
96
+ const stepMag = Math.min(5.0, Math.abs(delta));
97
+ const stepSize = copySign(stepMag, delta);
98
+ state = VerletBlendInterpolator._integrate(state, stepSize);
99
+ }
100
+ return state;
101
+ }
102
+ getCachedState(epoch) {
103
+ if (!this.inWindow(epoch)) {
104
+ return null;
105
+ }
106
+ return this._matchState(epoch);
107
+ }
108
+ toCubicSpline() {
109
+ return CubicSplineInterpolator.fromEphemeris(this.ephemeris);
110
+ }
111
+ toLagrange(order = 10) {
112
+ return LagrangeInterpolator.fromEphemeris(this.ephemeris, order);
113
+ }
114
+ }
115
+ //# sourceMappingURL=VerletBlendInterpolator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VerletBlendInterpolator.js","sourceRoot":"","sources":["../../src/interpolator/VerletBlendInterpolator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
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 { Thrust } from '../force/Thrust';
20
+ export declare class TwoBurnOrbitTransfer {
21
+ vInit: number;
22
+ vFinal: number;
23
+ vTransA: number;
24
+ vTransB: number;
25
+ tTrans: number;
26
+ constructor(vInit: number, vFinal: number, vTransA: number, vTransB: number, tTrans: number);
27
+ /**
28
+ * Calculates the parameters for a Hohmann transfer orbit between two circular orbits.
29
+ *
30
+ * @param rInit The initial radius of the orbit. (km)
31
+ * @param rFinal The final radius of the orbit. (km)
32
+ * @returns An instance of TwoBurnOrbitTransfer containing the calculated parameters.
33
+ */
34
+ static hohmannTransfer(rInit: number, rFinal: number): TwoBurnOrbitTransfer;
35
+ get deltaV(): number;
36
+ /**
37
+ * Calculates the two maneuver thrusts required for a two-burn orbit transfer.
38
+ * @param epoch The epoch of the maneuver.
39
+ * @param durationRate The duration rate of the maneuver (s/m/s).
40
+ * @returns An array containing the two thrust objects representing the maneuvers.
41
+ */
42
+ toManeuvers(epoch: EpochUTC, durationRate?: number): [Thrust, Thrust];
43
+ }
@@ -0,0 +1,62 @@
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 } from 'ootk-core';
19
+ import { Thrust } from '../force/Thrust';
20
+ // / Container for a two-burn orbit transfer.
21
+ export class TwoBurnOrbitTransfer {
22
+ // / Create a new [TwoBurnOrbitTransfer] object.
23
+ constructor(vInit, vFinal, vTransA, vTransB, tTrans) {
24
+ this.vInit = vInit;
25
+ this.vFinal = vFinal;
26
+ this.vTransA = vTransA;
27
+ this.vTransB = vTransB;
28
+ this.tTrans = tTrans;
29
+ // Nothing to do here.
30
+ }
31
+ /**
32
+ * Calculates the parameters for a Hohmann transfer orbit between two circular orbits.
33
+ *
34
+ * @param rInit The initial radius of the orbit. (km)
35
+ * @param rFinal The final radius of the orbit. (km)
36
+ * @returns An instance of TwoBurnOrbitTransfer containing the calculated parameters.
37
+ */
38
+ static hohmannTransfer(rInit, rFinal) {
39
+ const vInit = Math.sqrt(Earth.mu / rInit);
40
+ const vFinal = Math.sqrt(Earth.mu / rFinal);
41
+ const vTransA = vInit * (Math.sqrt((2.0 * rFinal) / (rInit + rFinal)) - 1.0);
42
+ const vTransB = vFinal * (1.0 - Math.sqrt((2 * rInit) / (rInit + rFinal)));
43
+ const tTrans = Math.PI * Math.sqrt((rInit + rFinal) ** 3 / (8.0 * Earth.mu));
44
+ return new TwoBurnOrbitTransfer(vInit, vFinal, vTransA, vTransB, tTrans);
45
+ }
46
+ // / Return the total delta-velocity magnitude for both maneuvers _(km/s)_.
47
+ get deltaV() {
48
+ return Math.abs(this.vTransA) + Math.abs(this.vTransB);
49
+ }
50
+ /**
51
+ * Calculates the two maneuver thrusts required for a two-burn orbit transfer.
52
+ * @param epoch The epoch of the maneuver.
53
+ * @param durationRate The duration rate of the maneuver (s/m/s).
54
+ * @returns An array containing the two thrust objects representing the maneuvers.
55
+ */
56
+ toManeuvers(epoch, durationRate = 0.0) {
57
+ const mA = new Thrust(epoch, 0.0, this.vTransA * 1000.0, 0.0, durationRate);
58
+ const mB = new Thrust(epoch.roll(this.tTrans), 0.0, this.vTransB * 1000.0, 0.0, durationRate);
59
+ return [mA, mB];
60
+ }
61
+ }
62
+ //# sourceMappingURL=TwoBurnOrbitTransfer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TwoBurnOrbitTransfer.js","sourceRoot":"","sources":["../../src/maneuver/TwoBurnOrbitTransfer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,KAAK,EAAY,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,6CAA6C;AAC7C,MAAM,OAAO,oBAAoB;IAC/B,gDAAgD;IAChD,YACS,KAAa,EACb,MAAc,EACd,OAAe,EACf,OAAe,EACf,MAAc;QAJd,UAAK,GAAL,KAAK,CAAQ;QACb,WAAM,GAAN,MAAM,CAAQ;QACd,YAAO,GAAP,OAAO,CAAQ;QACf,YAAO,GAAP,OAAO,CAAQ;QACf,WAAM,GAAN,MAAM,CAAQ;QAErB,sBAAsB;IACxB,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,eAAe,CAAC,KAAa,EAAE,MAAc;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QAC7E,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAC3E,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QAE7E,OAAO,IAAI,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAC3E,CAAC;IAED,2EAA2E;IAC3E,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzD,CAAC;IAED;;;;;OAKG;IACH,WAAW,CAAC,KAAe,EAAE,YAAY,GAAG,GAAG;QAC7C,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,GAAG,MAAM,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;QAC5E,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,GAAG,MAAM,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;QAE9F,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAClB,CAAC;CACF"}
@@ -0,0 +1,66 @@
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, Vector3D } from 'ootk-core';
19
+ import { Thrust } from '../force/Thrust';
20
+ import { StateInterpolator } from '../interpolator/StateInterpolator';
21
+ import { ForceModel } from './../force/ForceModel';
22
+ export declare class Waypoint {
23
+ epoch: EpochUTC;
24
+ relativePosition: Vector3D;
25
+ constructor(epoch: EpochUTC, relativePosition: Vector3D);
26
+ /**
27
+ * Return the perturbed error in a [maneuver] when compared against the
28
+ * target [waypoint] given an initial [state], [forceModel],
29
+ * [target] interpolator, and speculative relative maneuver
30
+ * [components] _(m/s)_.
31
+ */
32
+ static _error(waypoint: Waypoint, maneuver: Thrust, state: J2000, forceModel: ForceModel, target: StateInterpolator, components: Float64Array): number;
33
+ /**
34
+ * Generate a score function for refining perturbed [waypoint] maneuvers.
35
+ *
36
+ * The score function takes an array of speculative radial, intrack, and
37
+ * crosstrack components _(m/s)_ and returns the propagated error from the
38
+ * desired waypoint target.
39
+ */
40
+ static _refineManeuverScore(waypoint: Waypoint, maneuver: Thrust, state: J2000, forceModel: ForceModel, target: StateInterpolator): (components: Float64Array) => number;
41
+ /**
42
+ * Convert an array of [waypoints] into a maneuver sequence given an
43
+ * [interceptor] state, [pivot] epoch for the first burn to arrive at the
44
+ * first waypoint, and [target] ephemeris interpolator.
45
+ *
46
+ * Optional arguments are as follows:
47
+ * - `preManeuvers`: maneuvers to execute before the pivot burn
48
+ * - `postManeuvers`: maneuvers to execute after the last pivot burn
49
+ * - `durationRate`: thruster duration rate _(s/m/s)_
50
+ * - `forceModel`: interceptor force model, defaults to two-body
51
+ * - `refine`: refine maneuvers to account for perturbations if `true`
52
+ * - `maxIter`: maximum refinement iterations per maneuver
53
+ * - `printIter`: print debug information on each refinement iteration
54
+ */
55
+ static toManeuvers(interceptor: J2000, pivot: EpochUTC, waypoints: Waypoint[], target: StateInterpolator, preManeuvers: Thrust[] | null, postManeuvers: Thrust[] | null, { durationRate, forceModel, refine, maxIter, printIter, }?: {
56
+ durationRate?: number;
57
+ forceModel?: ForceModel;
58
+ refine?: boolean;
59
+ maxIter?: number;
60
+ printIter?: boolean;
61
+ }): Thrust[];
62
+ static _refineManeuvers(waypoints: Waypoint[], maneuvers: Thrust[], interceptor: J2000, forceModel: ForceModel, target: StateInterpolator, { maxIter, printIter, }?: {
63
+ maxIter?: number;
64
+ printIter?: boolean;
65
+ }): Thrust[];
66
+ }