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.
- package/.eslintrc.json +14 -14
- package/CHANGELOG.md +122 -0
- package/README.md +27 -40
- package/jest.config.ts +30 -0
- package/lib/coordinate/Hill.d.ts +50 -0
- package/lib/coordinate/Hill.js +214 -0
- package/lib/coordinate/Hill.js.map +1 -0
- package/lib/coordinate/index.d.ts +1 -0
- package/lib/coordinate/index.js +2 -0
- package/lib/coordinate/index.js.map +1 -0
- package/lib/covariance/CovarianceSample.d.ts +44 -0
- package/lib/covariance/CovarianceSample.js +146 -0
- package/lib/covariance/CovarianceSample.js.map +1 -0
- package/lib/covariance/StateCovariance.d.ts +41 -0
- package/lib/covariance/StateCovariance.js +62 -0
- package/lib/covariance/StateCovariance.js.map +1 -0
- package/lib/force/AtmosphericDrag.d.ts +32 -0
- package/lib/force/AtmosphericDrag.js +66 -0
- package/lib/force/AtmosphericDrag.js.map +1 -0
- package/{dist/ootk.d.ts → lib/force/EarthGravity.d.ts} +13 -11
- package/lib/force/EarthGravity.js +115 -0
- package/lib/force/EarthGravity.js.map +1 -0
- package/lib/force/Force.d.ts +25 -0
- package/lib/force/Force.js +30 -0
- package/lib/force/Force.js.map +1 -0
- package/lib/force/ForceModel.d.ts +38 -0
- package/lib/force/ForceModel.js +71 -0
- package/lib/force/ForceModel.js.map +1 -0
- package/lib/force/Gravity.d.ts +41 -0
- package/lib/force/Gravity.js +48 -0
- package/lib/force/Gravity.js.map +1 -0
- package/lib/force/SolarRadiationPressure.d.ts +27 -0
- package/lib/force/SolarRadiationPressure.js +42 -0
- package/lib/force/SolarRadiationPressure.js.map +1 -0
- package/lib/force/ThirdBodyGravity.d.ts +27 -0
- package/lib/force/ThirdBodyGravity.js +56 -0
- package/lib/force/ThirdBodyGravity.js.map +1 -0
- package/lib/force/Thrust.d.ts +35 -0
- package/lib/force/Thrust.js +53 -0
- package/lib/force/Thrust.js.map +1 -0
- package/lib/interpolator/ChebyshevCoefficients.d.ts +54 -0
- package/lib/interpolator/ChebyshevCoefficients.js +90 -0
- package/lib/interpolator/ChebyshevCoefficients.js.map +1 -0
- package/lib/interpolator/ChebyshevInterpolator.d.ts +39 -0
- package/lib/interpolator/ChebyshevInterpolator.js +71 -0
- package/lib/interpolator/ChebyshevInterpolator.js.map +1 -0
- package/lib/interpolator/CubicSpline.d.ts +36 -0
- package/lib/interpolator/CubicSpline.js +64 -0
- package/lib/interpolator/CubicSpline.js.map +1 -0
- package/lib/interpolator/CubicSplineInterpolator.d.ts +37 -0
- package/lib/interpolator/CubicSplineInterpolator.js +78 -0
- package/lib/interpolator/CubicSplineInterpolator.js.map +1 -0
- package/lib/interpolator/FieldInterpolator.d.ts +26 -0
- package/lib/interpolator/FieldInterpolator.js +31 -0
- package/lib/interpolator/FieldInterpolator.js.map +1 -0
- package/lib/interpolator/Interpolator.d.ts +23 -0
- package/lib/interpolator/Interpolator.js +48 -0
- package/lib/interpolator/Interpolator.js.map +1 -0
- package/lib/interpolator/LagrangeInterpolator.d.ts +42 -0
- package/lib/interpolator/LagrangeInterpolator.js +156 -0
- package/lib/interpolator/LagrangeInterpolator.js.map +1 -0
- package/lib/interpolator/StateInterpolator.d.ts +29 -0
- package/lib/interpolator/StateInterpolator.js +37 -0
- package/lib/interpolator/StateInterpolator.js.map +1 -0
- package/lib/interpolator/VerletBlendInterpolator.d.ts +44 -0
- package/lib/interpolator/VerletBlendInterpolator.js +115 -0
- package/lib/interpolator/VerletBlendInterpolator.js.map +1 -0
- package/lib/maneuver/TwoBurnOrbitTransfer.d.ts +43 -0
- package/lib/maneuver/TwoBurnOrbitTransfer.js +62 -0
- package/lib/maneuver/TwoBurnOrbitTransfer.js.map +1 -0
- package/lib/maneuver/Waypoint.d.ts +66 -0
- package/lib/maneuver/Waypoint.js +152 -0
- package/lib/maneuver/Waypoint.js.map +1 -0
- package/lib/objects/DetailedSatellite.d.ts +94 -0
- package/lib/objects/DetailedSatellite.js +140 -0
- package/lib/objects/DetailedSatellite.js.map +1 -0
- package/lib/objects/DetailedSensor.d.ts +43 -0
- package/lib/objects/DetailedSensor.js +45 -0
- package/lib/objects/DetailedSensor.js.map +1 -0
- package/lib/objects/{space-object.d.ts → LandObject.d.ts} +19 -21
- package/lib/objects/LandObject.js +28 -0
- package/lib/objects/LandObject.js.map +1 -0
- package/lib/objects/Marker.d.ts +21 -0
- package/lib/objects/Marker.js +25 -0
- package/lib/objects/Marker.js.map +1 -0
- package/lib/objects/index.d.ts +5 -4
- package/lib/objects/index.js +5 -4
- package/lib/objects/index.js.map +1 -1
- package/lib/observation/Observation.d.ts +51 -0
- package/lib/observation/Observation.js +71 -0
- package/lib/observation/Observation.js.map +1 -0
- package/lib/observation/ObservationOptical.d.ts +47 -0
- package/lib/observation/ObservationOptical.js +101 -0
- package/lib/observation/ObservationOptical.js.map +1 -0
- package/lib/observation/ObservationRadar.d.ts +43 -0
- package/lib/observation/ObservationRadar.js +90 -0
- package/lib/observation/ObservationRadar.js.map +1 -0
- package/lib/observation/ObservationUtils.d.ts +21 -0
- package/lib/observation/ObservationUtils.js +33 -0
- package/lib/observation/ObservationUtils.js.map +1 -0
- package/lib/observation/PropagatorPairs.d.ts +31 -0
- package/lib/observation/PropagatorPairs.js +40 -0
- package/lib/observation/PropagatorPairs.js.map +1 -0
- package/lib/ootk.d.ts +10 -9
- package/lib/ootk.js +10 -9
- package/lib/ootk.js.map +1 -1
- package/lib/operations/BoxMuller.d.ts +41 -0
- package/lib/operations/BoxMuller.js +66 -0
- package/lib/operations/BoxMuller.js.map +1 -0
- package/lib/operations/EulerAngles.d.ts +50 -0
- package/lib/operations/EulerAngles.js +111 -0
- package/lib/operations/EulerAngles.js.map +1 -0
- package/lib/operations/Quaternion.d.ts +57 -0
- package/lib/operations/Quaternion.js +164 -0
- package/lib/operations/Quaternion.js.map +1 -0
- package/lib/operations/RandomGaussianSource.d.ts +25 -0
- package/lib/operations/RandomGaussianSource.js +43 -0
- package/lib/operations/RandomGaussianSource.js.map +1 -0
- package/lib/operations/index.d.ts +4 -0
- package/lib/operations/index.js +5 -0
- package/lib/operations/index.js.map +1 -0
- package/lib/optimize/ChebyshevCompressor.d.ts +31 -0
- package/lib/optimize/ChebyshevCompressor.js +80 -0
- package/lib/optimize/ChebyshevCompressor.js.map +1 -0
- package/lib/optimize/DownhillSimplex.d.ts +50 -0
- package/lib/optimize/DownhillSimplex.js +168 -0
- package/lib/optimize/DownhillSimplex.js.map +1 -0
- package/lib/optimize/GoldenSection.d.ts +33 -0
- package/lib/optimize/GoldenSection.js +49 -0
- package/lib/optimize/GoldenSection.js.map +1 -0
- package/lib/optimize/PolynomialRegression.d.ts +37 -0
- package/lib/optimize/PolynomialRegression.js +66 -0
- package/lib/optimize/PolynomialRegression.js.map +1 -0
- package/lib/optimize/PolynomicalRegressionResult.d.ts +28 -0
- package/lib/optimize/PolynomicalRegressionResult.js +32 -0
- package/lib/optimize/PolynomicalRegressionResult.js.map +1 -0
- package/lib/optimize/SimpleLinearRegression.d.ts +41 -0
- package/lib/optimize/SimpleLinearRegression.js +107 -0
- package/lib/optimize/SimpleLinearRegression.js.map +1 -0
- package/lib/optimize/SimplexEntry.d.ts +33 -0
- package/lib/optimize/SimplexEntry.js +39 -0
- package/lib/optimize/SimplexEntry.js.map +1 -0
- package/lib/orbit_determination/BatchLeastSquaresOD.d.ts +54 -0
- package/lib/orbit_determination/BatchLeastSquaresOD.js +118 -0
- package/lib/orbit_determination/BatchLeastSquaresOD.js.map +1 -0
- package/lib/orbit_determination/BatchLeastSquaresResult.d.ts +29 -0
- package/lib/orbit_determination/BatchLeastSquaresResult.js +31 -0
- package/lib/orbit_determination/BatchLeastSquaresResult.js.map +1 -0
- package/lib/orbit_determination/GibbsIOD.d.ts +33 -0
- package/lib/orbit_determination/GibbsIOD.js +70 -0
- package/lib/orbit_determination/GibbsIOD.js.map +1 -0
- package/lib/orbit_determination/GoodingIOD.d.ts +52 -0
- package/lib/orbit_determination/GoodingIOD.js +244 -0
- package/lib/orbit_determination/GoodingIOD.js.map +1 -0
- package/{dist/objects/space-object.d.ts → lib/orbit_determination/HerrickGibbsIOD.d.ts} +17 -22
- package/lib/orbit_determination/HerrickGibbsIOD.js +49 -0
- package/lib/orbit_determination/HerrickGibbsIOD.js.map +1 -0
- package/lib/orbit_determination/LambertIOD.d.ts +46 -0
- package/lib/orbit_determination/LambertIOD.js +199 -0
- package/lib/orbit_determination/LambertIOD.js.map +1 -0
- package/lib/orbit_determination/ModifiedGoodingIOD.d.ts +41 -0
- package/lib/orbit_determination/ModifiedGoodingIOD.js +82 -0
- package/lib/orbit_determination/ModifiedGoodingIOD.js.map +1 -0
- package/lib/propagator/DormandPrince54Propagator.d.ts +29 -0
- package/lib/propagator/DormandPrince54Propagator.js +68 -0
- package/lib/propagator/DormandPrince54Propagator.js.map +1 -0
- package/lib/propagator/KeplerPropagator.d.ts +36 -0
- package/lib/propagator/KeplerPropagator.js +81 -0
- package/lib/propagator/KeplerPropagator.js.map +1 -0
- package/lib/propagator/Propagator.d.ts +35 -0
- package/lib/propagator/Propagator.js +163 -0
- package/lib/propagator/Propagator.js.map +1 -0
- package/lib/propagator/RkCheckpoint.d.ts +23 -0
- package/lib/propagator/RkCheckpoint.js +26 -0
- package/lib/propagator/RkCheckpoint.js.map +1 -0
- package/lib/propagator/RkResult.d.ts +24 -0
- package/lib/propagator/RkResult.js +28 -0
- package/lib/propagator/RkResult.js.map +1 -0
- package/lib/propagator/RungeKutta4Propagator.d.ts +46 -0
- package/lib/propagator/RungeKutta4Propagator.js +132 -0
- package/lib/propagator/RungeKutta4Propagator.js.map +1 -0
- package/lib/propagator/RungeKutta89Propagator.d.ts +29 -0
- package/lib/propagator/RungeKutta89Propagator.js +130 -0
- package/lib/propagator/RungeKutta89Propagator.js.map +1 -0
- package/lib/propagator/RungeKuttaAdaptive.d.ts +52 -0
- package/lib/propagator/RungeKuttaAdaptive.js +152 -0
- package/lib/propagator/RungeKuttaAdaptive.js.map +1 -0
- package/lib/propagator/Sgp4Propagator.d.ts +35 -0
- package/lib/propagator/Sgp4Propagator.js +55 -0
- package/lib/propagator/Sgp4Propagator.js.map +1 -0
- package/lib/smoothing/ExponentialSmoothing.d.ts +24 -0
- package/lib/smoothing/ExponentialSmoothing.js +82 -0
- package/lib/smoothing/ExponentialSmoothing.js.map +1 -0
- package/lib/types/types.d.ts +68 -262
- package/lib/types/types.js +23 -33
- package/lib/types/types.js.map +1 -1
- package/package.json +28 -42
- package/codecov.yml +0 -21
- package/dist/objects/base-object.d.ts +0 -40
- package/dist/objects/detailed-sat.d.ts +0 -66
- package/dist/objects/index.d.ts +0 -4
- package/dist/objects/sat.d.ts +0 -92
- package/dist/objects/sensor.d.ts +0 -87
- package/dist/objects/star.d.ts +0 -46
- package/dist/ootk.js +0 -2
- package/dist/ootk.js.LICENSE.txt +0 -77
- package/dist/sgp4/Sgp4Assembly.d.ts +0 -5
- package/dist/sgp4/sgp4.d.ts +0 -82
- package/dist/tle/tle-format-data.d.ts +0 -6
- package/dist/tle/tle.d.ts +0 -374
- package/dist/transforms/transforms.d.ts +0 -55
- package/dist/types/types.d.ts +0 -280
- package/dist/utils/constants.d.ts +0 -34
- package/dist/utils/moon-math.d.ts +0 -113
- package/dist/utils/sun-math.d.ts +0 -230
- package/dist/utils/utils.d.ts +0 -39
- package/lib/objects/base-object.d.ts +0 -40
- package/lib/objects/base-object.js +0 -109
- package/lib/objects/base-object.js.map +0 -1
- package/lib/objects/detailed-sat.d.ts +0 -66
- package/lib/objects/detailed-sat.js +0 -149
- package/lib/objects/detailed-sat.js.map +0 -1
- package/lib/objects/sat.d.ts +0 -92
- package/lib/objects/sat.js +0 -188
- package/lib/objects/sat.js.map +0 -1
- package/lib/objects/sensor.d.ts +0 -87
- package/lib/objects/sensor.js +0 -255
- package/lib/objects/sensor.js.map +0 -1
- package/lib/objects/space-object.js +0 -60
- package/lib/objects/space-object.js.map +0 -1
- package/lib/objects/star.d.ts +0 -46
- package/lib/objects/star.js +0 -91
- package/lib/objects/star.js.map +0 -1
- package/lib/sgp4/Sgp4Assembly.d.ts +0 -5
- package/lib/sgp4/Sgp4Assembly.js +0 -75
- package/lib/sgp4/Sgp4Assembly.js.map +0 -1
- package/lib/sgp4/sgp4.d.ts +0 -82
- package/lib/sgp4/sgp4.js +0 -3274
- package/lib/sgp4/sgp4.js.map +0 -1
- package/lib/tle/tle-format-data.d.ts +0 -6
- package/lib/tle/tle-format-data.js +0 -10
- package/lib/tle/tle-format-data.js.map +0 -1
- package/lib/tle/tle.d.ts +0 -374
- package/lib/tle/tle.js +0 -611
- package/lib/tle/tle.js.map +0 -1
- package/lib/transforms/transforms.d.ts +0 -55
- package/lib/transforms/transforms.js +0 -209
- package/lib/transforms/transforms.js.map +0 -1
- package/lib/utils/constants.d.ts +0 -34
- package/lib/utils/constants.js +0 -35
- package/lib/utils/constants.js.map +0 -1
- package/lib/utils/moon-math.d.ts +0 -113
- package/lib/utils/moon-math.js +0 -387
- package/lib/utils/moon-math.js.map +0 -1
- package/lib/utils/sun-math.d.ts +0 -230
- package/lib/utils/sun-math.js +0 -422
- package/lib/utils/sun-math.js.map +0 -1
- package/lib/utils/utils.d.ts +0 -39
- package/lib/utils/utils.js +0 -100
- package/lib/utils/utils.js.map +0 -1
- package/sandbox.html +0 -8
- /package/{LICENSE.MD → LICENSE.md} +0 -0
|
@@ -0,0 +1,244 @@
|
|
|
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, TAU, Vector3D } from 'ootk-core';
|
|
19
|
+
import { ForceModel } from '../force/ForceModel';
|
|
20
|
+
import { RungeKutta89Propagator } from '../propagator/RungeKutta89Propagator';
|
|
21
|
+
import { GibbsIOD } from './GibbsIOD';
|
|
22
|
+
import { LambertIOD } from './LambertIOD';
|
|
23
|
+
/**
|
|
24
|
+
* Gooding angles-only initial orbit determination.
|
|
25
|
+
*
|
|
26
|
+
* Used for orbit determination from three optical observations.
|
|
27
|
+
*/
|
|
28
|
+
export class GoodingIOD {
|
|
29
|
+
constructor(o1, o2, o3, mu = Earth.mu) {
|
|
30
|
+
this._vObserverPosition1 = Vector3D.origin;
|
|
31
|
+
this._vObserverPosition2 = Vector3D.origin;
|
|
32
|
+
this._vObserverPosition3 = Vector3D.origin;
|
|
33
|
+
this._r = 0.0;
|
|
34
|
+
this._v = 0.0;
|
|
35
|
+
this._t = 0.0;
|
|
36
|
+
this._r1 = 0.0;
|
|
37
|
+
this._r2 = 0.0;
|
|
38
|
+
this._r3 = 0.0;
|
|
39
|
+
this._rho1 = 0.0;
|
|
40
|
+
this._rho2 = 0.0;
|
|
41
|
+
this._rho3 = 0.0;
|
|
42
|
+
this._d1 = 0.0;
|
|
43
|
+
this._d3 = 0.0;
|
|
44
|
+
this._facFiniteDiff = 0.0;
|
|
45
|
+
this._forceModel = new ForceModel().setGravity(1.0);
|
|
46
|
+
this._mu = mu;
|
|
47
|
+
this._o1 = o1;
|
|
48
|
+
this._o2 = o2;
|
|
49
|
+
this._o3 = o3;
|
|
50
|
+
}
|
|
51
|
+
_getPositionOnLoS2({ e1, r01, e3, r03, t13, t12, nRev, posigrade, }) {
|
|
52
|
+
const p1 = this._vObserverPosition1.add(e1.scale(r01));
|
|
53
|
+
this._r1 = p1.magnitude();
|
|
54
|
+
const p3 = this._vObserverPosition3.add(e3.scale(r03));
|
|
55
|
+
this._r3 = p3.magnitude();
|
|
56
|
+
const p13 = p1.cross(p3);
|
|
57
|
+
let th = Math.atan2(p13.magnitude(), p1.dot(p3));
|
|
58
|
+
if (!posigrade) {
|
|
59
|
+
th = TAU - th;
|
|
60
|
+
}
|
|
61
|
+
const v1 = new Float64Array(2);
|
|
62
|
+
const exitflag = LambertIOD.solve(this._r1, this._r3, th, t13, nRev, v1);
|
|
63
|
+
if (exitflag) {
|
|
64
|
+
const pn = p1.cross(p3);
|
|
65
|
+
const pt = pn.cross(p1);
|
|
66
|
+
let rt = pt.magnitude();
|
|
67
|
+
if (!posigrade) {
|
|
68
|
+
rt = -rt;
|
|
69
|
+
}
|
|
70
|
+
const vel1 = p1.scale(v1[0] / this._r1).add(pt.scale(v1[1] / rt));
|
|
71
|
+
const p2 = new RungeKutta89Propagator(new J2000(this._o1.epoch, p1, vel1), this._forceModel).propagate(this._o1.epoch.roll(t12)).position;
|
|
72
|
+
return p2;
|
|
73
|
+
}
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
_modifyIterate(lineOfSight1, lineOfSight3) {
|
|
77
|
+
const r13 = this._vObserverPosition3.subtract(this._vObserverPosition1);
|
|
78
|
+
this._d1 = r13.dot(lineOfSight1);
|
|
79
|
+
this._d3 = r13.dot(lineOfSight3);
|
|
80
|
+
const d2 = lineOfSight1.dot(lineOfSight3);
|
|
81
|
+
const d4 = 1.0 - d2 * d2;
|
|
82
|
+
this._rho1 = Math.max((this._d1 - this._d3 * d2) / d4, 0.0);
|
|
83
|
+
this._rho3 = Math.max((this._d1 * d2 - this._d3) / d4, 0.0);
|
|
84
|
+
}
|
|
85
|
+
_computeDerivatives({ x, y, lineOfSight1, lineOfSight3, pin, ein, t13, t12, nrev, direction, fd, gd, }) {
|
|
86
|
+
const p = pin.normalize();
|
|
87
|
+
const en = ein.normalize();
|
|
88
|
+
const dx = this._facFiniteDiff * x;
|
|
89
|
+
const dy = this._facFiniteDiff * y;
|
|
90
|
+
const cm1 = this._getPositionOnLoS2({
|
|
91
|
+
e1: lineOfSight1,
|
|
92
|
+
r01: x - dx,
|
|
93
|
+
e3: lineOfSight3,
|
|
94
|
+
r03: y,
|
|
95
|
+
t13,
|
|
96
|
+
t12,
|
|
97
|
+
nRev: nrev,
|
|
98
|
+
posigrade: direction,
|
|
99
|
+
}).subtract(this._vObserverPosition2);
|
|
100
|
+
const fm1 = p.dot(cm1);
|
|
101
|
+
const gm1 = en.dot(cm1);
|
|
102
|
+
const cp1 = this._getPositionOnLoS2({
|
|
103
|
+
e1: lineOfSight1,
|
|
104
|
+
r01: x + dx,
|
|
105
|
+
e3: lineOfSight3,
|
|
106
|
+
r03: y,
|
|
107
|
+
t13,
|
|
108
|
+
t12,
|
|
109
|
+
nRev: nrev,
|
|
110
|
+
posigrade: direction,
|
|
111
|
+
}).subtract(this._vObserverPosition2);
|
|
112
|
+
const fp1 = p.dot(cp1);
|
|
113
|
+
const gp1 = en.dot(cp1);
|
|
114
|
+
const fx = (fp1 - fm1) / (2.0 * dx);
|
|
115
|
+
const gx = (gp1 - gm1) / (2.0 * dx);
|
|
116
|
+
const cm3 = this._getPositionOnLoS2({
|
|
117
|
+
e1: lineOfSight1,
|
|
118
|
+
r01: x,
|
|
119
|
+
e3: lineOfSight3,
|
|
120
|
+
r03: y - dy,
|
|
121
|
+
t13,
|
|
122
|
+
t12,
|
|
123
|
+
nRev: nrev,
|
|
124
|
+
posigrade: direction,
|
|
125
|
+
}).subtract(this._vObserverPosition2);
|
|
126
|
+
const fm3 = p.dot(cm3);
|
|
127
|
+
const gm3 = en.dot(cm3);
|
|
128
|
+
const cp3 = this._getPositionOnLoS2({
|
|
129
|
+
e1: lineOfSight1,
|
|
130
|
+
r01: x,
|
|
131
|
+
e3: lineOfSight3,
|
|
132
|
+
r03: y + dy,
|
|
133
|
+
t13,
|
|
134
|
+
t12,
|
|
135
|
+
nRev: nrev,
|
|
136
|
+
posigrade: direction,
|
|
137
|
+
}).subtract(this._vObserverPosition2);
|
|
138
|
+
const fp3 = p.dot(cp3);
|
|
139
|
+
const gp3 = en.dot(cp3);
|
|
140
|
+
const fy = (fp3 - fm3) / (2.0 * dy);
|
|
141
|
+
const gy = (gp3 - gm3) / (2.0 * dy);
|
|
142
|
+
fd[0] = fx;
|
|
143
|
+
fd[1] = fy;
|
|
144
|
+
gd[0] = gx;
|
|
145
|
+
gd[1] = gy;
|
|
146
|
+
}
|
|
147
|
+
solve(r1Init, r3Init, nRev = 0, direction = true) {
|
|
148
|
+
const lineOfSight1 = this._o1.observation.lineOfSight();
|
|
149
|
+
const lineOfSight2 = this._o2.observation.lineOfSight();
|
|
150
|
+
const lineOfSight3 = this._o3.observation.lineOfSight();
|
|
151
|
+
this._r = Math.max(r1Init, r3Init);
|
|
152
|
+
this._v = Math.sqrt(this._mu / this._r);
|
|
153
|
+
this._t = this._r / this._v;
|
|
154
|
+
this._vObserverPosition1 = this._o1.site.position.scale(1.0 / this._r);
|
|
155
|
+
this._vObserverPosition2 = this._o2.site.position.scale(1.0 / this._r);
|
|
156
|
+
this._vObserverPosition3 = this._o3.site.position.scale(1.0 / this._r);
|
|
157
|
+
const maxiter = 100;
|
|
158
|
+
this._solveRangeProblem({
|
|
159
|
+
rho1init: r1Init / this._r,
|
|
160
|
+
rho3init: r3Init / this._r,
|
|
161
|
+
t13: this._o3.epoch.difference(this._o1.epoch) / this._t,
|
|
162
|
+
t12: this._o2.epoch.difference(this._o1.epoch) / this._t,
|
|
163
|
+
nrev: nRev,
|
|
164
|
+
direction,
|
|
165
|
+
lineOfSight1,
|
|
166
|
+
lineOfSight2,
|
|
167
|
+
lineOfSight3,
|
|
168
|
+
maxIterations: maxiter,
|
|
169
|
+
});
|
|
170
|
+
const gibbs = new GibbsIOD(this._mu);
|
|
171
|
+
const p1 = this._vObserverPosition1.add(lineOfSight1.scale(this._rho1)).scale(this._r);
|
|
172
|
+
const p2 = this._vObserverPosition2.add(lineOfSight2.scale(this._rho2)).scale(this._r);
|
|
173
|
+
const p3 = this._vObserverPosition3.add(lineOfSight3.scale(this._rho3)).scale(this._r);
|
|
174
|
+
return gibbs.solve(p1, p2, p3, this._o2.epoch, this._o3.epoch);
|
|
175
|
+
}
|
|
176
|
+
_solveRangeProblem({ rho1init, rho3init, t13, t12, nrev, direction, lineOfSight1, lineOfSight2, lineOfSight3, maxIterations, }) {
|
|
177
|
+
const arbf = 1e-6;
|
|
178
|
+
const cvtol = 1e-14;
|
|
179
|
+
this._rho1 = rho1init;
|
|
180
|
+
this._rho3 = rho3init;
|
|
181
|
+
let iter = 0;
|
|
182
|
+
let stoppingCriterion = 10.0 * cvtol;
|
|
183
|
+
while (iter < maxIterations && Math.abs(stoppingCriterion) > cvtol) {
|
|
184
|
+
this._facFiniteDiff = arbf;
|
|
185
|
+
const p2 = this._getPositionOnLoS2({
|
|
186
|
+
e1: lineOfSight1,
|
|
187
|
+
r01: this._rho1,
|
|
188
|
+
e3: lineOfSight3,
|
|
189
|
+
r03: this._rho3,
|
|
190
|
+
t13,
|
|
191
|
+
t12,
|
|
192
|
+
nRev: nrev,
|
|
193
|
+
posigrade: direction,
|
|
194
|
+
});
|
|
195
|
+
if (p2 === null) {
|
|
196
|
+
this._modifyIterate(lineOfSight1, lineOfSight3);
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
this._r2 = p2.magnitude();
|
|
200
|
+
const c = p2.subtract(this._vObserverPosition2);
|
|
201
|
+
this._rho2 = c.magnitude();
|
|
202
|
+
const cr = lineOfSight2.dot(c);
|
|
203
|
+
const u = lineOfSight2.cross(c);
|
|
204
|
+
const p = u.cross(lineOfSight2).normalize();
|
|
205
|
+
const ent = lineOfSight2.cross(p);
|
|
206
|
+
const enr = ent.magnitude();
|
|
207
|
+
if (enr === 0.0) {
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
const en = ent.normalize();
|
|
211
|
+
const fc = p.dot(c);
|
|
212
|
+
const fd = new Float64Array(2);
|
|
213
|
+
const gd = new Float64Array(2);
|
|
214
|
+
this._computeDerivatives({
|
|
215
|
+
x: this._rho1,
|
|
216
|
+
y: this._rho3,
|
|
217
|
+
lineOfSight1,
|
|
218
|
+
lineOfSight3,
|
|
219
|
+
pin: p,
|
|
220
|
+
ein: en,
|
|
221
|
+
t13,
|
|
222
|
+
t12,
|
|
223
|
+
nrev,
|
|
224
|
+
direction,
|
|
225
|
+
fd,
|
|
226
|
+
gd,
|
|
227
|
+
});
|
|
228
|
+
const fr1 = fd[0];
|
|
229
|
+
const fr3 = fd[1];
|
|
230
|
+
const gr1 = gd[0];
|
|
231
|
+
const gr3 = gd[1];
|
|
232
|
+
const detj = fr1 * gr3 - fr3 * gr1;
|
|
233
|
+
this._d3 = (-gr3 * fc) / detj;
|
|
234
|
+
this._d1 = (gr1 * fc) / detj;
|
|
235
|
+
this._rho1 += this._d3;
|
|
236
|
+
this._rho3 += this._d1;
|
|
237
|
+
const den = Math.max(cr, this._r2);
|
|
238
|
+
stoppingCriterion = fc / den;
|
|
239
|
+
}
|
|
240
|
+
++iter;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
//# sourceMappingURL=GoodingIOD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GoodingIOD.js","sourceRoot":"","sources":["../../src/orbit_determination/GoodingIOD.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
/**
|
|
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 SpaceObject class is meant to provide properties to satellites/stars that
|
|
7
|
-
* do not apply to ground based objects.
|
|
2
|
+
* @author @thkruz Theodore Kruczek
|
|
8
3
|
*
|
|
9
4
|
* @license AGPL-3.0-or-later
|
|
10
|
-
* @Copyright (c) 2020-
|
|
5
|
+
* @Copyright (c) 2020-2024 Theodore Kruczek
|
|
11
6
|
*
|
|
12
7
|
* Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
|
|
13
8
|
* terms of the GNU Affero General Public License as published by the Free Software
|
|
@@ -20,19 +15,19 @@
|
|
|
20
15
|
* You should have received a copy of the GNU Affero General Public License along with
|
|
21
16
|
* Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
|
|
22
17
|
*/
|
|
23
|
-
import {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
18
|
+
import { EpochUTC, J2000, Vector3D } from 'ootk-core';
|
|
19
|
+
/**
|
|
20
|
+
* Herrik-Gibbs 3-position initial orbit determination.
|
|
21
|
+
*
|
|
22
|
+
* Possibly better than regular Gibbs IOD for closely spaced position
|
|
23
|
+
* vectors (less than 5°).
|
|
24
|
+
*/
|
|
25
|
+
export declare class HerrickGibbsIOD {
|
|
26
|
+
mu: number;
|
|
27
|
+
/**
|
|
28
|
+
* Create a new [HerrickGibbsIOD] object with optional
|
|
29
|
+
* gravitational parameter [mu].
|
|
30
|
+
*/
|
|
31
|
+
constructor(mu?: number);
|
|
32
|
+
solve(r1: Vector3D, t1: EpochUTC, r2: Vector3D, t2: EpochUTC, r3: Vector3D, t3: EpochUTC): J2000;
|
|
37
33
|
}
|
|
38
|
-
export {};
|
|
@@ -0,0 +1,49 @@
|
|
|
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 } from 'ootk-core';
|
|
19
|
+
/**
|
|
20
|
+
* Herrik-Gibbs 3-position initial orbit determination.
|
|
21
|
+
*
|
|
22
|
+
* Possibly better than regular Gibbs IOD for closely spaced position
|
|
23
|
+
* vectors (less than 5°).
|
|
24
|
+
*/
|
|
25
|
+
export class HerrickGibbsIOD {
|
|
26
|
+
/**
|
|
27
|
+
* Create a new [HerrickGibbsIOD] object with optional
|
|
28
|
+
* gravitational parameter [mu].
|
|
29
|
+
*/
|
|
30
|
+
constructor(mu = Earth.mu) {
|
|
31
|
+
this.mu = mu;
|
|
32
|
+
// Nothing to do here.
|
|
33
|
+
}
|
|
34
|
+
// / Attempt to create a state estimate from three inertial position vectors.
|
|
35
|
+
solve(r1, t1, r2, t2, r3, t3) {
|
|
36
|
+
const dt31 = t3.difference(t1);
|
|
37
|
+
const dt32 = t3.difference(t2);
|
|
38
|
+
const dt21 = t2.difference(t1);
|
|
39
|
+
const r1m = r1.magnitude();
|
|
40
|
+
const r2m = r2.magnitude();
|
|
41
|
+
const r3m = r3.magnitude();
|
|
42
|
+
const vA = r1.scale(-dt32 * (1.0 / (dt21 * dt31) + this.mu / (12.0 * r1m * r1m * r1m)));
|
|
43
|
+
const vB = r2.scale((dt32 - dt21) * (1.0 / (dt21 * dt32) + this.mu / (12.0 * r2m * r2m * r2m)));
|
|
44
|
+
const vC = r3.scale(dt21 * (1.0 / (dt32 * dt31) + this.mu / (12.0 * r3m * r3m * r3m)));
|
|
45
|
+
const v2 = vA.add(vB).add(vC);
|
|
46
|
+
return new J2000(t2, r2, v2);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=HerrickGibbsIOD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HerrickGibbsIOD.js","sourceRoot":"","sources":["../../src/orbit_determination/HerrickGibbsIOD.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,KAAK,EAAY,KAAK,EAAY,MAAM,WAAW,CAAC;AAE7D;;;;;GAKG;AACH,MAAM,OAAO,eAAe;IAC1B;;;OAGG;IACH,YAAmB,KAAa,KAAK,CAAC,EAAE;QAArB,OAAE,GAAF,EAAE,CAAmB;QACtC,sBAAsB;IACxB,CAAC;IAED,6EAA6E;IAC7E,KAAK,CAAC,EAAY,EAAE,EAAY,EAAE,EAAY,EAAE,EAAY,EAAE,EAAY,EAAE,EAAY;QACtF,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC/B,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC/B,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC/B,MAAM,GAAG,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACxF,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAChG,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACvF,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAE9B,OAAO,IAAI,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/B,CAAC;CACF"}
|
|
@@ -0,0 +1,46 @@
|
|
|
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
|
+
export declare class LambertIOD {
|
|
20
|
+
mu: number;
|
|
21
|
+
/**
|
|
22
|
+
* Create a new [LambertIOD] object with optional
|
|
23
|
+
* gravitational parameter [mu].
|
|
24
|
+
*/
|
|
25
|
+
constructor(mu?: number);
|
|
26
|
+
/**
|
|
27
|
+
* Try to guess the short path argument given an [interceptor] and
|
|
28
|
+
* [target] state.
|
|
29
|
+
*/
|
|
30
|
+
static useShortPath(interceptor: J2000, target: J2000): boolean;
|
|
31
|
+
private static timeOfFlight_;
|
|
32
|
+
/**
|
|
33
|
+
* Attempt to solve output velocity [v1] _(km/s)_ given radii [r1] and
|
|
34
|
+
* [r2] _(canonical)_, sweep angle [dth] _(rad)_, time of flight [tau]
|
|
35
|
+
* _(canonical)_, and number of revolutions _(mRev)_.
|
|
36
|
+
*/
|
|
37
|
+
static solve(r1: number, r2: number, dth: number, tau: number, mRev: number, v1: Float64Array): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Estimate a state vector for inertial position [p1] _(km)_ given the
|
|
40
|
+
* two epoch and positions.
|
|
41
|
+
*/
|
|
42
|
+
estimate(p1: Vector3D, p2: Vector3D, t1: EpochUTC, t2: EpochUTC, { posigrade, nRev }?: {
|
|
43
|
+
posigrade?: boolean;
|
|
44
|
+
nRev?: number;
|
|
45
|
+
}): J2000 | null;
|
|
46
|
+
}
|
|
@@ -0,0 +1,199 @@
|
|
|
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 } from 'ootk-core';
|
|
19
|
+
// / Lambert two-position and time initial orbit determination.
|
|
20
|
+
export class LambertIOD {
|
|
21
|
+
/**
|
|
22
|
+
* Create a new [LambertIOD] object with optional
|
|
23
|
+
* gravitational parameter [mu].
|
|
24
|
+
*/
|
|
25
|
+
constructor(mu = Earth.mu) {
|
|
26
|
+
this.mu = mu;
|
|
27
|
+
// Nothing to do here.
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Try to guess the short path argument given an [interceptor] and
|
|
31
|
+
* [target] state.
|
|
32
|
+
*/
|
|
33
|
+
static useShortPath(interceptor, target) {
|
|
34
|
+
const transN = interceptor.position.cross(target.position);
|
|
35
|
+
const h = interceptor.position.cross(interceptor.velocity);
|
|
36
|
+
return h.dot(transN) >= 0;
|
|
37
|
+
}
|
|
38
|
+
static timeOfFlight_(x, longway, mrev, minSma, speri, chord) {
|
|
39
|
+
const a = minSma / (1.0 - x * x);
|
|
40
|
+
let tof;
|
|
41
|
+
if (Math.abs(x) < 1) {
|
|
42
|
+
const beta = longway * 2.0 * Math.asin(Math.sqrt((speri - chord) / (2.0 * a)));
|
|
43
|
+
const alpha = 2.0 * Math.acos(x);
|
|
44
|
+
tof = a * Math.sqrt(a) * (alpha - Math.sin(alpha) - (beta - Math.sin(beta)) + 2.0 * Math.PI * mrev);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
const alpha = 2.0 * Math.acosh(x);
|
|
48
|
+
const beta = longway * 2.0 * Math.asinh(Math.sqrt((speri - chord) / (-2.0 * a)));
|
|
49
|
+
tof = -a * Math.sqrt(-a) * (Math.sinh(alpha) - alpha - (Math.sinh(beta) - beta));
|
|
50
|
+
}
|
|
51
|
+
return tof;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Attempt to solve output velocity [v1] _(km/s)_ given radii [r1] and
|
|
55
|
+
* [r2] _(canonical)_, sweep angle [dth] _(rad)_, time of flight [tau]
|
|
56
|
+
* _(canonical)_, and number of revolutions _(mRev)_.
|
|
57
|
+
*/
|
|
58
|
+
static solve(r1, r2, dth, tau, mRev, v1) {
|
|
59
|
+
const leftBranch = dth < Math.PI;
|
|
60
|
+
let longway = 1;
|
|
61
|
+
if (dth > Math.PI) {
|
|
62
|
+
longway = -1;
|
|
63
|
+
}
|
|
64
|
+
const m = Math.abs(mRev);
|
|
65
|
+
const rtof = Math.abs(tau);
|
|
66
|
+
const theta = dth;
|
|
67
|
+
const chord = Math.sqrt(r1 * r1 + r2 * r2 - 2.0 * r1 * r2 * Math.cos(theta));
|
|
68
|
+
const speri = 0.5 * (r1 + r2 + chord);
|
|
69
|
+
const minSma = 0.5 * speri;
|
|
70
|
+
const lambda = longway * Math.sqrt(1.0 - chord / speri);
|
|
71
|
+
const logt = Math.log(rtof);
|
|
72
|
+
let in1;
|
|
73
|
+
let in2;
|
|
74
|
+
let x1;
|
|
75
|
+
let x2;
|
|
76
|
+
if (m === 0) {
|
|
77
|
+
in1 = -0.6523333;
|
|
78
|
+
in2 = 0.6523333;
|
|
79
|
+
x1 = Math.log(1.0 + in1);
|
|
80
|
+
x2 = Math.log(1.0 + in2);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
if (!leftBranch) {
|
|
84
|
+
in1 = -0.523334;
|
|
85
|
+
in2 = -0.223334;
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
in1 = 0.723334;
|
|
89
|
+
in2 = 0.523334;
|
|
90
|
+
}
|
|
91
|
+
x1 = Math.tan((in1 * Math.PI) / 2);
|
|
92
|
+
x2 = Math.tan((in2 * Math.PI) / 2);
|
|
93
|
+
}
|
|
94
|
+
const tof1 = LambertIOD.timeOfFlight_(in1, longway, m, minSma, speri, chord);
|
|
95
|
+
const tof2 = LambertIOD.timeOfFlight_(in2, longway, m, minSma, speri, chord);
|
|
96
|
+
let y1;
|
|
97
|
+
let y2;
|
|
98
|
+
if (m === 0) {
|
|
99
|
+
y1 = Math.log(tof1) - logt;
|
|
100
|
+
y2 = Math.log(tof2) - logt;
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
y1 = tof1 - rtof;
|
|
104
|
+
y2 = tof2 - rtof;
|
|
105
|
+
}
|
|
106
|
+
let err = 1e20;
|
|
107
|
+
let iterations = 0;
|
|
108
|
+
const tol = 1e-13;
|
|
109
|
+
const maxiter = 50;
|
|
110
|
+
let xnew = 0.0;
|
|
111
|
+
while (err > tol && iterations < maxiter) {
|
|
112
|
+
xnew = (x1 * y2 - y1 * x2) / (y2 - y1);
|
|
113
|
+
let xt;
|
|
114
|
+
if (m === 0) {
|
|
115
|
+
xt = Math.exp(xnew) - 1.0;
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
xt = (Math.atan(xnew) * 2.0) / Math.PI;
|
|
119
|
+
}
|
|
120
|
+
const tof = LambertIOD.timeOfFlight_(xt, longway, m, minSma, speri, chord);
|
|
121
|
+
let ynew;
|
|
122
|
+
if (m === 0) {
|
|
123
|
+
ynew = Math.log(tof) - logt;
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
ynew = tof - rtof;
|
|
127
|
+
}
|
|
128
|
+
x1 = x2;
|
|
129
|
+
x2 = xnew;
|
|
130
|
+
y1 = y2;
|
|
131
|
+
y2 = ynew;
|
|
132
|
+
err = Math.abs(x1 - xnew);
|
|
133
|
+
++iterations;
|
|
134
|
+
}
|
|
135
|
+
if (err > tol) {
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
let x;
|
|
139
|
+
if (m === 0) {
|
|
140
|
+
x = Math.exp(xnew) - 1.0;
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
x = (Math.atan(xnew) * 2.0) / Math.PI;
|
|
144
|
+
}
|
|
145
|
+
const sma = minSma / (1.0 - x * x);
|
|
146
|
+
let eta;
|
|
147
|
+
if (x < 1) {
|
|
148
|
+
const alfa = 2.0 * Math.acos(x);
|
|
149
|
+
const beta = longway * 2.0 * Math.asin(Math.sqrt((speri - chord) / (2.0 * sma)));
|
|
150
|
+
const psi = (alfa - beta) / 2.0;
|
|
151
|
+
const sinPsi = Math.sin(psi);
|
|
152
|
+
const etaSq = (2.0 * sma * sinPsi * sinPsi) / speri;
|
|
153
|
+
eta = Math.sqrt(etaSq);
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
const gamma = 2.0 * Math.acosh(x);
|
|
157
|
+
const delta = longway * 2.0 * Math.asinh(Math.sqrt((chord - speri) / (2.0 * sma)));
|
|
158
|
+
const psi = (gamma - delta) / 2.0;
|
|
159
|
+
const sinhPsi = Math.sinh(psi);
|
|
160
|
+
const etaSq = (-2.0 * sma * sinhPsi * sinhPsi) / speri;
|
|
161
|
+
eta = Math.sqrt(etaSq);
|
|
162
|
+
}
|
|
163
|
+
const vr1 = (1.0 / eta) * Math.sqrt(1.0 / minSma) * ((2.0 * lambda * minSma) / r1 - (lambda + x * eta));
|
|
164
|
+
const vt1 = (1.0 / eta) * Math.sqrt(1.0 / minSma) * Math.sqrt(r2 / r1) * Math.sin(dth / 2.0);
|
|
165
|
+
v1[0] = vr1;
|
|
166
|
+
v1[1] = vt1;
|
|
167
|
+
return true;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Estimate a state vector for inertial position [p1] _(km)_ given the
|
|
171
|
+
* two epoch and positions.
|
|
172
|
+
*/
|
|
173
|
+
estimate(p1, p2, t1, t2, { posigrade = true, nRev = 0 } = {}) {
|
|
174
|
+
const r1 = p1.magnitude();
|
|
175
|
+
const r2 = p2.magnitude();
|
|
176
|
+
const tof = t2.difference(t1);
|
|
177
|
+
const r = Math.max(r1, r2);
|
|
178
|
+
const v = Math.sqrt(this.mu / r);
|
|
179
|
+
const t = r / v;
|
|
180
|
+
let dth = p1.angle(p2);
|
|
181
|
+
if (!posigrade) {
|
|
182
|
+
dth = 2 * Math.PI - dth;
|
|
183
|
+
}
|
|
184
|
+
const vDep = new Float64Array(2);
|
|
185
|
+
const exitFlag = LambertIOD.solve(r1 / r, r2 / r, dth, tof / t, nRev, vDep);
|
|
186
|
+
if (exitFlag) {
|
|
187
|
+
const pn = p1.cross(p2);
|
|
188
|
+
const pt = pn.cross(p1);
|
|
189
|
+
let rt = pt.magnitude();
|
|
190
|
+
if (!posigrade) {
|
|
191
|
+
rt = -rt;
|
|
192
|
+
}
|
|
193
|
+
const vel1 = p1.scale((v * vDep[0]) / r1).add(pt.scale((v * vDep[1]) / rt));
|
|
194
|
+
return new J2000(t1, p1, vel1);
|
|
195
|
+
}
|
|
196
|
+
return null;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=LambertIOD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LambertIOD.js","sourceRoot":"","sources":["../../src/orbit_determination/LambertIOD.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,KAAK,EAAY,KAAK,EAAY,MAAM,WAAW,CAAC;AAE7D,+DAA+D;AAC/D,MAAM,OAAO,UAAU;IACrB;;;OAGG;IACH,YAAmB,KAAa,KAAK,CAAC,EAAE;QAArB,OAAE,GAAF,EAAE,CAAmB;QACtC,sBAAsB;IACxB,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,YAAY,CAAC,WAAkB,EAAE,MAAa;QACnD,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC3D,MAAM,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE3D,OAAO,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAEO,MAAM,CAAC,aAAa,CAC1B,CAAS,EACT,OAAe,EACf,IAAY,EACZ,MAAc,EACd,KAAa,EACb,KAAa;QAEb,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACjC,IAAI,GAAW,CAAC;QAEhB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;YACnB,MAAM,IAAI,GAAG,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/E,MAAM,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAEjC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;SACrG;aAAM;YACL,MAAM,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM,IAAI,GAAG,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAEjF,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;SAClF;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,EAAU,EAAE,EAAU,EAAE,GAAW,EAAE,GAAW,EAAE,IAAY,EAAE,EAAgB;QAC3F,MAAM,UAAU,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC;QACjC,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,IAAI,GAAG,GAAG,IAAI,CAAC,EAAE,EAAE;YACjB,OAAO,GAAG,CAAC,CAAC,CAAC;SACd;QAED,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3B,MAAM,KAAK,GAAG,GAAG,CAAC;QAElB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7E,MAAM,KAAK,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC;QAEtC,MAAM,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC;QAC3B,MAAM,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC;QACxD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAE5B,IAAI,GAAW,CAAC;QAChB,IAAI,GAAW,CAAC;QAChB,IAAI,EAAU,CAAC;QACf,IAAI,EAAU,CAAC;QAEf,IAAI,CAAC,KAAK,CAAC,EAAE;YACX,GAAG,GAAG,CAAC,SAAS,CAAC;YACjB,GAAG,GAAG,SAAS,CAAC;YAChB,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;YACzB,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;SAC1B;aAAM;YACL,IAAI,CAAC,UAAU,EAAE;gBACf,GAAG,GAAG,CAAC,QAAQ,CAAC;gBAChB,GAAG,GAAG,CAAC,QAAQ,CAAC;aACjB;iBAAM;gBACL,GAAG,GAAG,QAAQ,CAAC;gBACf,GAAG,GAAG,QAAQ,CAAC;aAChB;YACD,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACnC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;SACpC;QACD,MAAM,IAAI,GAAG,UAAU,CAAC,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAC7E,MAAM,IAAI,GAAG,UAAU,CAAC,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAE7E,IAAI,EAAU,CAAC;QACf,IAAI,EAAU,CAAC;QAEf,IAAI,CAAC,KAAK,CAAC,EAAE;YACX,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;YAC3B,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;SAC5B;aAAM;YACL,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;YACjB,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;SAClB;QACD,IAAI,GAAG,GAAG,IAAI,CAAC;QACf,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,MAAM,GAAG,GAAG,KAAK,CAAC;QAClB,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,IAAI,IAAI,GAAG,GAAG,CAAC;QAEf,OAAO,GAAG,GAAG,GAAG,IAAI,UAAU,GAAG,OAAO,EAAE;YACxC,IAAI,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;YACvC,IAAI,EAAU,CAAC;YAEf,IAAI,CAAC,KAAK,CAAC,EAAE;gBACX,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;aAC3B;iBAAM;gBACL,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;aACxC;YAED,MAAM,GAAG,GAAG,UAAU,CAAC,aAAa,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YAE3E,IAAI,IAAY,CAAC;YAEjB,IAAI,CAAC,KAAK,CAAC,EAAE;gBACX,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;aAC7B;iBAAM;gBACL,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC;aACnB;YAED,EAAE,GAAG,EAAE,CAAC;YACR,EAAE,GAAG,IAAI,CAAC;YACV,EAAE,GAAG,EAAE,CAAC;YACR,EAAE,GAAG,IAAI,CAAC;YAEV,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;YAC1B,EAAE,UAAU,CAAC;SACd;QAED,IAAI,GAAG,GAAG,GAAG,EAAE;YACb,OAAO,KAAK,CAAC;SACd;QAED,IAAI,CAAS,CAAC;QAEd,IAAI,CAAC,KAAK,CAAC,EAAE;YACX,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;SAC1B;aAAM;YACL,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;SACvC;QAED,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAEnC,IAAI,GAAW,CAAC;QAEhB,IAAI,CAAC,GAAG,CAAC,EAAE;YACT,MAAM,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChC,MAAM,IAAI,GAAG,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YACjF,MAAM,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;YAChC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC7B,MAAM,KAAK,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,MAAM,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC;YAEpD,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACxB;aAAM;YACL,MAAM,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM,KAAK,GAAG,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YACnF,MAAM,GAAG,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC;YAClC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC/B,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,OAAO,GAAG,OAAO,CAAC,GAAG,KAAK,CAAC;YAEvD,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACxB;QAED,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,MAAM,GAAG,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACxG,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;QAE7F,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QACZ,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAEZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACH,QAAQ,CACN,EAAY,EACZ,EAAY,EACZ,EAAY,EACZ,EAAY,EACZ,EAAE,SAAS,GAAG,IAAI,EAAE,IAAI,GAAG,CAAC,KAA6C,EAAE;QAE3E,MAAM,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC;QAC1B,MAAM,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAE9B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEhB,IAAI,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAEvB,IAAI,CAAC,SAAS,EAAE;YACd,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC;SACzB;QAED,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAE5E,IAAI,QAAQ,EAAE;YACZ,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACxB,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACxB,IAAI,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC;YAExB,IAAI,CAAC,SAAS,EAAE;gBACd,EAAE,GAAG,CAAC,EAAE,CAAC;aACV;YACD,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAE5E,OAAO,IAAI,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;SAChC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|
|
@@ -0,0 +1,41 @@
|
|
|
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 { ObservationOptical } from './../observation/ObservationOptical';
|
|
20
|
+
type SolveOptions = {
|
|
21
|
+
nRev?: number;
|
|
22
|
+
direction?: boolean;
|
|
23
|
+
posSearch?: number;
|
|
24
|
+
velSearch?: number;
|
|
25
|
+
tolerance?: number;
|
|
26
|
+
printIter?: boolean;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Gooding angles-only initial orbit determination.
|
|
30
|
+
*
|
|
31
|
+
* Used for orbit determination from multiple optical observations.
|
|
32
|
+
*/
|
|
33
|
+
export declare class ModifiedGoodingIOD {
|
|
34
|
+
private _observations;
|
|
35
|
+
private _mu;
|
|
36
|
+
constructor(observations: ObservationOptical[], mu?: number);
|
|
37
|
+
private _createInitial;
|
|
38
|
+
private _createErrorFunction;
|
|
39
|
+
solve(r0: number, rN: number, { nRev, direction, posSearch, velSearch, tolerance, printIter, }: SolveOptions): J2000;
|
|
40
|
+
}
|
|
41
|
+
export {};
|