From 53c166d2c70f872015077f6ea6424daead6d4c0a Mon Sep 17 00:00:00 2001 From: Kartik Kumar Date: Tue, 30 May 2023 14:08:03 +0200 Subject: [PATCH] Update docs. --- docs/html/astroAll_8hpp.html | 62 +- docs/html/astroAll_8hpp__incl.map | 66 +- docs/html/astroAll_8hpp__incl.md5 | 2 +- docs/html/astroAll_8hpp__incl.png | Bin 53727 -> 51649 bytes docs/html/namespaceastro.html | 54 +- docs/html/orbitalElementConversions_8hpp.html | 19 +- .../orbitalElementConversions_8hpp__incl.map | 18 +- .../orbitalElementConversions_8hpp__incl.md5 | 2 +- .../orbitalElementConversions_8hpp__incl.png | Bin 19044 -> 16767 bytes ...orbitalElementConversions_8hpp_source.html | 1147 ++++++++--------- 10 files changed, 667 insertions(+), 703 deletions(-) diff --git a/docs/html/astroAll_8hpp.html b/docs/html/astroAll_8hpp.html index c0de964..3f2cb53 100644 --- a/docs/html/astroAll_8hpp.html +++ b/docs/html/astroAll_8hpp.html @@ -105,42 +105,40 @@
- + - - - - - + + + + + - - - + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - + + +
diff --git a/docs/html/astroAll_8hpp__incl.map b/docs/html/astroAll_8hpp__incl.map index b853c30..97adb0d 100644 --- a/docs/html/astroAll_8hpp__incl.map +++ b/docs/html/astroAll_8hpp__incl.map @@ -1,38 +1,36 @@ - + - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/astroAll_8hpp__incl.md5 b/docs/html/astroAll_8hpp__incl.md5 index fd1f73c..182acdf 100644 --- a/docs/html/astroAll_8hpp__incl.md5 +++ b/docs/html/astroAll_8hpp__incl.md5 @@ -1 +1 @@ -a2b28307db35fbd06780c502b423f098 \ No newline at end of file +635858882283ac34f0213486c71b7173 \ No newline at end of file diff --git a/docs/html/astroAll_8hpp__incl.png b/docs/html/astroAll_8hpp__incl.png index 8c026b2d0283ff09643e587f5d3c5d7da212e5ea..11ca694d267cc7900b4b2a27c7ba0d2a82ee2f14 100644 GIT binary patch literal 51649 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 literal 53727 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≶lX%@n2=p5MpWGCn4=1V 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 H_U!)vjjZra diff --git a/docs/html/namespaceastro.html b/docs/html/namespaceastro.html index fd0f857..f9639b8 100644 --- a/docs/html/namespaceastro.html +++ b/docs/html/namespaceastro.html @@ -502,9 +502,9 @@

Definition at line 82 of file orbitalElementConversions.hpp.

+

Definition at line 79 of file orbitalElementConversions.hpp.

-

References trueLongitudeOfPeriapsis, xPositionIndex, xVelocityIndex, yPositionIndex, yVelocityIndex, zPositionIndex, and zVelocityIndex.

+

References argumentOfLatitude, trueLongitude, trueLongitudeOfPeriapsis, xPositionIndex, xVelocityIndex, yPositionIndex, yVelocityIndex, zPositionIndex, and zVelocityIndex.

@@ -574,7 +574,7 @@

Definition at line 345 of file orbitalElementConversions.hpp.

+

Definition at line 316 of file orbitalElementConversions.hpp.

References argumentOfPeriapsisIndex, eccentricityIndex, inclinationIndex, longitudeOfAscendingNodeIndex, semiMajorAxisIndex, trueAnomalyIndex, xPositionIndex, xVelocityIndex, yPositionIndex, yVelocityIndex, zPositionIndex, and zVelocityIndex.

@@ -625,9 +625,9 @@

Returns
Elliptical eccentric anomaly [rad]
-

Definition at line 449 of file orbitalElementConversions.hpp.

+

Definition at line 420 of file orbitalElementConversions.hpp.

-

Referenced by convertTrueAnomalyToEccentricAnomaly().

+

Referenced by convertTrueAnomalyToEccentricAnomaly().

@@ -676,9 +676,9 @@

Returns
Hyperbolic eccentric anomaly [rad]
-

Definition at line 482 of file orbitalElementConversions.hpp.

+

Definition at line 453 of file orbitalElementConversions.hpp.

-

Referenced by convertTrueAnomalyToEccentricAnomaly().

+

Referenced by convertTrueAnomalyToEccentricAnomaly().

@@ -728,9 +728,9 @@

Returns
Eccentric anomaly [rad]
-

Definition at line 524 of file orbitalElementConversions.hpp.

+

Definition at line 495 of file orbitalElementConversions.hpp.

-

References convertTrueAnomalyToEllipticalEccentricAnomaly(), and convertTrueAnomalyToHyperbolicEccentricAnomaly().

+

References convertTrueAnomalyToEllipticalEccentricAnomaly(), and convertTrueAnomalyToHyperbolicEccentricAnomaly().

@@ -779,9 +779,9 @@

Returns
Mean anomaly [rad]
-

Definition at line 563 of file orbitalElementConversions.hpp.

+

Definition at line 534 of file orbitalElementConversions.hpp.

-

Referenced by convertEccentricAnomalyToMeanAnomaly().

+

Referenced by convertEccentricAnomalyToMeanAnomaly().

@@ -830,9 +830,9 @@

Returns
Mean anomaly [rad]
-

Definition at line 587 of file orbitalElementConversions.hpp.

+

Definition at line 558 of file orbitalElementConversions.hpp.

-

Referenced by convertEccentricAnomalyToMeanAnomaly().

+

Referenced by convertEccentricAnomalyToMeanAnomaly().

@@ -882,9 +882,9 @@

Returns
Mean anomaly [rad]
-

Definition at line 615 of file orbitalElementConversions.hpp.

+

Definition at line 586 of file orbitalElementConversions.hpp.

-

References convertEllipticalEccentricAnomalyToMeanAnomaly(), and convertHyperbolicEccentricAnomalyToMeanAnomaly().

+

References convertEllipticalEccentricAnomalyToMeanAnomaly(), and convertHyperbolicEccentricAnomalyToMeanAnomaly().

@@ -931,9 +931,9 @@

Returns
True anomaly [rad]
-

Definition at line 651 of file orbitalElementConversions.hpp.

+

Definition at line 622 of file orbitalElementConversions.hpp.

-

Referenced by convertEccentricAnomalyToTrueAnomaly().

+

Referenced by convertEccentricAnomalyToTrueAnomaly().

@@ -980,9 +980,9 @@

Returns
True anomaly [rad]
-

Definition at line 676 of file orbitalElementConversions.hpp.

+

Definition at line 647 of file orbitalElementConversions.hpp.

-

Referenced by convertEccentricAnomalyToTrueAnomaly().

+

Referenced by convertEccentricAnomalyToTrueAnomaly().

@@ -1032,9 +1032,9 @@

Returns
True anomaly [rad]
-

Definition at line 711 of file orbitalElementConversions.hpp.

+

Definition at line 682 of file orbitalElementConversions.hpp.

-

References convertEllipticalEccentricAnomalyToTrueAnomaly(), and convertHyperbolicEccentricAnomalyToTrueAnomaly().

+

References convertEllipticalEccentricAnomalyToTrueAnomaly(), and convertHyperbolicEccentricAnomalyToTrueAnomaly().

@@ -1097,9 +1097,9 @@

Returns
Kepler equation value for given elliptical orbit [rad]
-

Definition at line 757 of file orbitalElementConversions.hpp.

+

Definition at line 728 of file orbitalElementConversions.hpp.

-

Referenced by convertEllipticalMeanAnomalyToEccentricAnomaly().

+

Referenced by convertEllipticalMeanAnomalyToEccentricAnomaly().

@@ -1153,9 +1153,9 @@

Returns
First-derivative of Kepler's function for elliptical orbits [rad]
-

Definition at line 783 of file orbitalElementConversions.hpp.

+

Definition at line 754 of file orbitalElementConversions.hpp.

-

Referenced by convertEllipticalMeanAnomalyToEccentricAnomaly().

+

Referenced by convertEllipticalMeanAnomalyToEccentricAnomaly().

@@ -1221,9 +1221,9 @@

Returns
Eccentric anomaly [rad]
-

Definition at line 813 of file orbitalElementConversions.hpp.

+

Definition at line 784 of file orbitalElementConversions.hpp.

-

References computeEllipticalKeplerFunction(), and computeFirstDerivativeEllipticalKeplerFunction().

+

References computeEllipticalKeplerFunction(), and computeFirstDerivativeEllipticalKeplerFunction().

diff --git a/docs/html/orbitalElementConversions_8hpp.html b/docs/html/orbitalElementConversions_8hpp.html index 52ec6bb..73bf55a 100644 --- a/docs/html/orbitalElementConversions_8hpp.html +++ b/docs/html/orbitalElementConversions_8hpp.html @@ -103,29 +103,26 @@ #include <stdexcept>
#include <vector>
#include "astro/stateVectorIndices.hpp"
-#include <iostream>
Include dependency graph for orbitalElementConversions.hpp:
- + - + - + - + - + - + - + - - - +
diff --git a/docs/html/orbitalElementConversions_8hpp__incl.map b/docs/html/orbitalElementConversions_8hpp__incl.map index e8525bf..353def8 100644 --- a/docs/html/orbitalElementConversions_8hpp__incl.map +++ b/docs/html/orbitalElementConversions_8hpp__incl.map @@ -1,19 +1,17 @@ - + - + - + - + - + - + - + - - - + diff --git a/docs/html/orbitalElementConversions_8hpp__incl.md5 b/docs/html/orbitalElementConversions_8hpp__incl.md5 index a5e8a28..554a8f7 100644 --- a/docs/html/orbitalElementConversions_8hpp__incl.md5 +++ b/docs/html/orbitalElementConversions_8hpp__incl.md5 @@ -1 +1 @@ -309d890323d94d11feb0af9ef6329cc6 \ No newline at end of file +53a07e996ba6c52db59723bba567e423 \ No newline at end of file diff --git a/docs/html/orbitalElementConversions_8hpp__incl.png b/docs/html/orbitalElementConversions_8hpp__incl.png index 253eac1c26fafe8e061ca598668346a396051211..d4fcd7f68f3e861cabbde3b5acc7e26fb04204ad 100644 GIT binary patch literal 16767 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 18
20
-
21// (debug)
-
22#include <iostream>
+
21namespace astro
+
22{
23
-
24namespace astro
-
25{
-
26
-
28
-
81template <typename Real, typename Vector6>
- -
83 const Vector6& cartesianElements,
-
84 const Real gravitationalParameter,
-
85 const Real tolerance = 10.0 * std::numeric_limits<Real>::epsilon())
-
86{
-
87 assert(cartesianElements.size() == 6);
-
88 assert(gravitationalParameter > 0.0);
+
25
+
78template <typename Real, typename Vector6>
+ +
80 const Vector6& cartesianElements,
+
81 const Real gravitationalParameter,
+
82 const Real tolerance = 10.0 * std::numeric_limits<Real>::epsilon())
+
83{
+
84 assert(cartesianElements.size() == 6);
+
85 assert(gravitationalParameter > 0.0);
+
86
+
87 const Real pi = 3.14159265358979323846;
+
88 const Real gravitationalParameterInverse = 1.0 / gravitationalParameter;
89
-
90 const Real pi = 3.14159265358979323846;
-
91 const Real gravitationalParameterInverse = 1.0 / gravitationalParameter;
+
90 typedef std::vector<Real> Vector;
+
91 Vector6 keplerianElements = cartesianElements;
92
-
93 typedef std::vector<Real> Vector;
-
94 Vector6 keplerianElements = cartesianElements;
-
95
-
96 // Cartesian position
-
97 const Vector position = Vector({cartesianElements[xPositionIndex],
-
98 cartesianElements[yPositionIndex],
-
99 cartesianElements[zPositionIndex]});
-
100 const Real positionNormSquared = position[0] * position[0]
-
101 + position[1] * position[1]
-
102 + position[2] * position[2];
-
103 const Real positionNorm = std::sqrt(positionNormSquared);
-
104 const Real positionNormInverse = 1.0 / positionNorm;
-
105
-
106std::cout << "(debug) r: " << positionNorm << std::endl;
-
107
-
108 // Cartesian velocity
-
109 const Vector velocity = Vector({cartesianElements[xVelocityIndex],
-
110 cartesianElements[yVelocityIndex],
-
111 cartesianElements[zVelocityIndex]});
-
112 const Real velocityNormSquared = velocity[0] * velocity[0]
-
113 + velocity[1] * velocity[1]
-
114 + velocity[2] * velocity[2];
-
115 const Real velocityNorm = std::sqrt(velocityNormSquared);
-
116
-
117std::cout << "(debug) v: " << std::sqrt(velocityNormSquared) << std::endl;
-
118
-
119 // Angular momentum
-
120 const Vector angularMomentum
-
121 = Vector({position[1] * velocity[2] - position[2] * velocity[1],
-
122 position[2] * velocity[0] - position[0] * velocity[2],
-
123 position[0] * velocity[1] - position[1] * velocity[0]});
-
124 const Real angularMomentumNormSquared = angularMomentum[0] * angularMomentum[0]
-
125 + angularMomentum[1] * angularMomentum[1]
-
126 + angularMomentum[2] * angularMomentum[2];
-
127 const Real angularMomentumNorm = std::sqrt(angularMomentumNormSquared);
-
128 const Vector angularMomentumUnitVector
-
129 = Vector({angularMomentum[0] / angularMomentumNorm,
-
130 angularMomentum[1] / angularMomentumNorm,
-
131 angularMomentum[2] / angularMomentumNorm});
-
132std::cout << "(debug) h: " << angularMomentum[0] << ","
-
133 << angularMomentum[1] << ","
-
134 << angularMomentum[2] << std::endl;
+
93 // Cartesian position
+
94 const Vector position = Vector({cartesianElements[xPositionIndex],
+
95 cartesianElements[yPositionIndex],
+
96 cartesianElements[zPositionIndex]});
+
97 const Real positionNormSquared = position[0] * position[0]
+
98 + position[1] * position[1]
+
99 + position[2] * position[2];
+
100 const Real positionNorm = std::sqrt(positionNormSquared);
+
101 const Real positionNormInverse = 1.0 / positionNorm;
+
102
+
103 // Cartesian velocity
+
104 const Vector velocity = Vector({cartesianElements[xVelocityIndex],
+
105 cartesianElements[yVelocityIndex],
+
106 cartesianElements[zVelocityIndex]});
+
107 const Real velocityNormSquared = velocity[0] * velocity[0]
+
108 + velocity[1] * velocity[1]
+
109 + velocity[2] * velocity[2];
+
110 const Real velocityNorm = std::sqrt(velocityNormSquared);
+
111
+
112 // Angular momentum
+
113 const Vector angularMomentum
+
114 = Vector({position[1] * velocity[2] - position[2] * velocity[1],
+
115 position[2] * velocity[0] - position[0] * velocity[2],
+
116 position[0] * velocity[1] - position[1] * velocity[0]});
+
117 const Real angularMomentumNormSquared = angularMomentum[0] * angularMomentum[0]
+
118 + angularMomentum[1] * angularMomentum[1]
+
119 + angularMomentum[2] * angularMomentum[2];
+
120 const Real angularMomentumNorm = std::sqrt(angularMomentumNormSquared);
+
121 const Vector angularMomentumUnitVector
+
122 = Vector({angularMomentum[0] / angularMomentumNorm,
+
123 angularMomentum[1] / angularMomentumNorm,
+
124 angularMomentum[2] / angularMomentumNorm});
+
125
+
126 // Eccentricity
+
127 const Real eccentricityVectorFirsTermMultiplier
+
128 = velocityNormSquared * gravitationalParameterInverse - positionNormInverse;
+
129
+
130 const Real positionDotVelocity = position[0] * velocity[0]
+
131 + position[1] * velocity[1]
+
132 + position[2] * velocity[2];
+
133
+
134 const Real positionDotVelocityScaled = positionDotVelocity / gravitationalParameter;
135
-
136std::cout << "(debug) hx: " << angularMomentum[0] << std::endl;
-
137std::cout << "(debug) hy: " << angularMomentum[1] << std::endl;
-
138std::cout << "(debug) hz: " << angularMomentum[2] << std::endl;
-
139std::cout << "(debug) h: " << angularMomentumNorm << std::endl;std::cout << "(debug) hx: " << angularMomentum[0] << std::endl;
-
140std::cout << "(debug) hy: " << angularMomentum[1] << std::endl;
-
141std::cout << "(debug) hz: " << angularMomentum[2] << std::endl;
-
142std::cout << "(debug) h: " << angularMomentumNorm << std::endl;
+
136 const Vector eccentricityVector
+
137 = Vector({eccentricityVectorFirsTermMultiplier * position[0]
+
138 - positionDotVelocity * gravitationalParameterInverse * velocity[0],
+
139 eccentricityVectorFirsTermMultiplier * position[1]
+
140 - positionDotVelocity * gravitationalParameterInverse * velocity[1],
+
141 eccentricityVectorFirsTermMultiplier * position[2]
+
142 - positionDotVelocity * gravitationalParameterInverse * velocity[2]});
143
-
144 // Eccentricity
-
145 const Real eccentricityVectorFirsTermMultiplier
-
146 = velocityNormSquared * gravitationalParameterInverse - positionNormInverse;
+
144 const Real eccentricityNormSquared = eccentricityVector[0] * eccentricityVector[0]
+
145 + eccentricityVector[1] * eccentricityVector[1]
+
146 + eccentricityVector[2] * eccentricityVector[2];
147
-
148 const Real positionDotVelocity = position[0] * velocity[0]
-
149 + position[1] * velocity[1]
-
150 + position[2] * velocity[2];
-
151
-
152 const Real positionDotVelocityScaled = positionDotVelocity / gravitationalParameter;
-
153
-
154 const Vector eccentricityVector
-
155 = Vector({eccentricityVectorFirsTermMultiplier * position[0]
-
156 - positionDotVelocity * gravitationalParameterInverse * velocity[0],
-
157 eccentricityVectorFirsTermMultiplier * position[1]
-
158 - positionDotVelocity * gravitationalParameterInverse * velocity[1],
-
159 eccentricityVectorFirsTermMultiplier * position[2]
-
160 - positionDotVelocity * gravitationalParameterInverse * velocity[2]});
-
161
-
162 const Real eccentricityNormSquared = eccentricityVector[0] * eccentricityVector[0]
-
163 + eccentricityVector[1] * eccentricityVector[1]
-
164 + eccentricityVector[2] * eccentricityVector[2];
-
165
-
166 const Real eccentricity = std::sqrt(eccentricityNormSquared);
-
167 keplerianElements[1] = eccentricity;
-
168
-
169std::cout << "(debug) ex: " << eccentricityVector[0] << std::endl;
-
170std::cout << "(debug) ey: " << eccentricityVector[1] << std::endl;
-
171std::cout << "(debug) ez: " << eccentricityVector[2] << std::endl;
-
172std::cout << "(debug) e: " << keplerianElements[1] << std::endl;
-
173
-
174 // Specifc total energy using the vis-viva equation
-
175 const Real specificTotalEnergy
-
176 = 0.5 * velocityNormSquared - gravitationalParameter / positionNorm;
-
177
-
178std::cout << "(debug) Esp: " << specificTotalEnergy << std::endl;
+
148 const Real eccentricity = std::sqrt(eccentricityNormSquared);
+
149 keplerianElements[1] = eccentricity;
+
150
+
151 // Specifc total energy using the vis-viva equation
+
152 const Real specificTotalEnergy
+
153 = 0.5 * velocityNormSquared - gravitationalParameter / positionNorm;
+
154
+
155 // Semi-major axis
+
156 Real semiMajorAxis = std::numeric_limits<Real>::quiet_NaN();
+
157 Real semiLatusRectum = std::numeric_limits<Real>::quiet_NaN();
+
158 if (std::fabs(eccentricity - 1.0) > tolerance)
+
159 {
+
160 semiMajorAxis = -0.5 * gravitationalParameter / specificTotalEnergy;
+
161 semiLatusRectum = semiMajorAxis * (1.0 - eccentricityNormSquared);
+
162 keplerianElements[0] = semiMajorAxis;
+
163 }
+
164 else
+
165 {
+
166 semiMajorAxis = std::numeric_limits<Real>::infinity();
+
167 semiLatusRectum = angularMomentumNormSquared * gravitationalParameterInverse;
+
168 keplerianElements[0] = semiLatusRectum;
+
169 }
+
170 assert(semiMajorAxis > 0.0);
+
171
+
172 // Inclination
+
173 const Real inclination = std::acos(angularMomentumUnitVector[2]);
+
174 keplerianElements[2] = inclination;
+
175
+
176 // Ascending node vector
+
177 const Vector ascendingNodeVector
+
178 = Vector({-angularMomentum[1], angularMomentum[0], 0.0});
179
-
180 // Semi-major axis
-
181 Real semiMajorAxis = std::numeric_limits<Real>::quiet_NaN();
-
182 Real semiLatusRectum = std::numeric_limits<Real>::quiet_NaN();
-
183 if (std::fabs(eccentricity - 1.0) > tolerance)
-
184 {
-
185 semiMajorAxis = -0.5 * gravitationalParameter / specificTotalEnergy;
-
186 semiLatusRectum = semiMajorAxis * (1.0 - eccentricityNormSquared);
-
187 keplerianElements[0] = semiMajorAxis;
-
188 }
-
189 else
-
190 {
-
191 semiMajorAxis = std::numeric_limits<Real>::infinity();
-
192 semiLatusRectum = angularMomentumNormSquared * gravitationalParameterInverse;
-
193 keplerianElements[0] = semiLatusRectum;
-
194 }
-
195 assert(semiMajorAxis > 0.0);
-
196std::cout << "(debug) a: " << semiMajorAxis << std::endl;
-
197
-
198std::cout << "(debug) a: " << keplerianElements[0] << std::endl;
-
199std::cout << "(debug) p: " << semiLatusRectum << std::endl;
-
200
-
201 // Inclination
-
202 const Real inclination = std::acos(angularMomentumUnitVector[2]);
-
203 keplerianElements[2] = inclination;
-
204
-
205std::cout << "(debug) i: " << keplerianElements[2] / pi * 180.0 << std::endl;
-
206
-
207 // Ascending node vector
-
208 const Vector ascendingNodeVector
-
209 = Vector({-angularMomentum[1], angularMomentum[0], 0.0});
-
210std::cout << "(debug) asc. node vec.: " << ascendingNodeVector[0] << ", "
-
211 << ascendingNodeVector[1] << ", "
-
212 << ascendingNodeVector[2] << std::endl;
-
213
-
214 const Real ascendingNodeVectorNormSquared
-
215 = ascendingNodeVector[0] * ascendingNodeVector[0]
-
216 + ascendingNodeVector[1] * ascendingNodeVector[1]
-
217 + ascendingNodeVector[2] * ascendingNodeVector[2];
-
218
-
219 const Real ascendingNodeVectorNorm = std::sqrt(ascendingNodeVectorNormSquared);
-
220
-
221 const Vector ascendingNodeUnitVector
-
222 = Vector({ascendingNodeVector[0] / ascendingNodeVectorNorm,
-
223 ascendingNodeVector[1] / ascendingNodeVectorNorm,
-
224 ascendingNodeVector[2] / ascendingNodeVectorNorm });
-
225
-
226std::cout << "(debug) nx: " << ascendingNodeVector[0] << std::endl;
-
227std::cout << "(debug) ny: " << ascendingNodeVector[1] << std::endl;
-
228std::cout << "(debug) nz: " << ascendingNodeVector[2] << std::endl;
-
229std::cout << "(debug) n: " << ascendingNodeVectorNorm << std::endl;
-
230
-
231 // Longitude of ascending node
-
232 Real longitudeOfAscendingNode = std::acos(ascendingNodeUnitVector[0]);
-
233
-
234 if (ascendingNodeVector[1] < 0.0)
-
235 {
-
236 longitudeOfAscendingNode = 2.0 * pi - longitudeOfAscendingNode;
-
237 }
-
238std::cout << "(debug) RAAN: " << longitudeOfAscendingNode << std::endl;
+
180 const Real ascendingNodeVectorNormSquared
+
181 = ascendingNodeVector[0] * ascendingNodeVector[0]
+
182 + ascendingNodeVector[1] * ascendingNodeVector[1]
+
183 + ascendingNodeVector[2] * ascendingNodeVector[2];
+
184
+
185 const Real ascendingNodeVectorNorm = std::sqrt(ascendingNodeVectorNormSquared);
+
186
+
187 const Vector ascendingNodeUnitVector
+
188 = Vector({ascendingNodeVector[0] / ascendingNodeVectorNorm,
+
189 ascendingNodeVector[1] / ascendingNodeVectorNorm,
+
190 ascendingNodeVector[2] / ascendingNodeVectorNorm });
+
191
+
192 // Longitude of ascending node
+
193 Real longitudeOfAscendingNode = std::acos(ascendingNodeUnitVector[0]);
+
194
+
195 if (ascendingNodeVector[1] < 0.0)
+
196 {
+
197 longitudeOfAscendingNode = 2.0 * pi - longitudeOfAscendingNode;
+
198 }
+
199
+
200 keplerianElements[4] = longitudeOfAscendingNode;
+
201
+
202 // Argument of periapsis
+
203 const Real ascendingNodeVectorDotEccentricityVector
+
204 = ascendingNodeVector[0] * eccentricityVector[0]
+
205 + ascendingNodeVector[1] * eccentricityVector[1]
+
206 + ascendingNodeVector[2] * eccentricityVector[2];
+
207
+
208 Real argumentOfPeriapsis = std::acos(ascendingNodeVectorDotEccentricityVector
+
209 / (ascendingNodeVectorNorm * eccentricity));
+
210
+
211 if (eccentricityVector[2] < 0.0)
+
212 {
+
213 argumentOfPeriapsis = 2.0 * pi - argumentOfPeriapsis;
+
214 }
+
215
+
216 keplerianElements[3] = argumentOfPeriapsis;
+
217
+
218 // True anomaly
+
219 const Real eccentricityVectorDotPosition = eccentricityVector[0] * position[0]
+
220 + eccentricityVector[1] * position[1]
+
221 + eccentricityVector[2] * position[2];
+
222
+
223 Real trueAnomaly = std::acos(eccentricityVectorDotPosition / (eccentricity * positionNorm));
+
224
+
225 if (positionDotVelocity < 0.0)
+
226 {
+
227 trueAnomaly = 2.0 * pi - trueAnomaly;
+
228 }
+
229
+
230 keplerianElements[5] = trueAnomaly;
+
231
+
232 // True longitude of periapsis
+
233 Real trueLongitudeOfPeriapsis = std::acos(eccentricityVector[0] / eccentricity);
+
234
+
235 if (eccentricityVector[1] < tolerance)
+
236 {
+ +
238 }
239
-
240 keplerianElements[4] = longitudeOfAscendingNode;
-
241
-
242std::cout << "(debug) raan: " << keplerianElements[4] / pi * 180.0 << std::endl;
-
243
-
244 // Argument of periapsis
-
245 const Real ascendingNodeVectorDotEccentricityVector
-
246 = ascendingNodeVector[0] * eccentricityVector[0]
-
247 + ascendingNodeVector[1] * eccentricityVector[1]
-
248 + ascendingNodeVector[2] * eccentricityVector[2];
-
249
-
250 Real argumentOfPeriapsis = std::acos(ascendingNodeVectorDotEccentricityVector
-
251 / (ascendingNodeVectorNorm * eccentricity));
-
252
-
253 if (eccentricityVector[2] < 0.0)
-
254 {
-
255 argumentOfPeriapsis = 2.0 * pi - argumentOfPeriapsis;
-
256 }
-
257
-
258 keplerianElements[3] = argumentOfPeriapsis;
+
240 // Special case: elliptical, equatorial
+
241 if(std::fabs(eccentricity) > tolerance && std::fabs(inclination) < tolerance)
+
242 {
+
243 longitudeOfAscendingNode = std::numeric_limits<Real>::quiet_NaN();
+
244 keplerianElements[4] = trueLongitudeOfPeriapsis;
+
245 }
+
246
+
247 // Argument of latitude
+
248 const Real ascendingNodeVectorDotPosition = ascendingNodeVector[0] * position[0]
+
249 + ascendingNodeVector[1] * position[1]
+
250 + ascendingNodeVector[2] * position[2];
+
251
+
252 Real argumentOfLatitude = std::acos(ascendingNodeVectorDotPosition
+
253 / (ascendingNodeVectorNorm * positionNorm));
+
254
+
255 if (position[2] < 0.0)
+
256 {
+ +
258 }
259
-
260std::cout << "(debug) omega: " << keplerianElements[3] / pi * 180.0 << std::endl;
-
261
-
262 // True anomaly
-
263 const Real eccentricityVectorDotPosition = eccentricityVector[0] * position[0]
-
264 + eccentricityVector[1] * position[1]
-
265 + eccentricityVector[2] * position[2];
+
260 // Special case: circular, inclined
+
261 if(std::fabs(eccentricity) < tolerance && std::fabs(inclination) > tolerance)
+
262 {
+
263 argumentOfPeriapsis = std::numeric_limits<Real>::quiet_NaN();
+
264 keplerianElements[3] = argumentOfLatitude;
+
265 }
266
-
267 Real trueAnomaly = std::acos(eccentricityVectorDotPosition / (eccentricity * positionNorm));
-
268
-
269 if (positionDotVelocity < 0.0)
+
267 // True longitude
+
268 Real trueLongitude = std::acos(position[0] / positionNorm);
+
269 if (position[1] < 0.0)
270 {
-
271 trueAnomaly = 2.0 * pi - trueAnomaly;
+
271 trueLongitude = 2.0 * pi - trueLongitude;
272 }
273
-
274 keplerianElements[5] = trueAnomaly;
-
275
-
276std::cout << "(debug) ta: " << keplerianElements[5] / pi * 180.0 << std::endl;
-
277
-
278 // Special cases
-
279 // Elliptical, equatorial
-
280 Real trueLongitudeOfPeriapsis = std::acos(eccentricityVector[0]/eccentricity);
-
281 if (std::fabs(eccentricityVector[1]) < tolerance)
-
282 {
- -
284 longitudeOfAscendingNode = std::numeric_limits<Real>::quiet_NaN();
-
285 keplerianElements[4] = trueLongitudeOfPeriapsis;
-
286 }
-
287
-
288 // // Circular, inclined
-
289 // const Real ascendingNodeVectorDotPosition = ascendingNodeVector[0] * position[0]
-
290 // + ascendingNodeVector[1] * position[1]
-
291 // + ascendingNodeVector[2] * position[2];
-
292 // Real argumentOfLatitude = std::acos(ascendingNodeVectorDotPosition
-
293 // / (ascendingNodeVectorNorm * positionNorm));
-
294 // if (position[2] < 0.0)
-
295 // {
-
296 // argumentOfLatitude = 2.0 * pi - argumentOfLatitude;
-
297 // longitudeOfAscendingNode = std::numeric_limits<Real>::quiet_NaN();
-
298 // keplerianElements[4] = argumentOfLatitude;
-
299 // }
-
300
-
301 // // Circular, equatorial
-
302 // Real trueLongitude = std::acos(position[0] / positionNorm);
-
303 // if (position[1] < 0.0)
-
304 // {
-
305 // trueLongitude = 2.0 * pi - trueLongitude;
-
306 // longitudeOfAscendingNode = std::numeric_limits<Real>::quiet_NaN();
-
307 // argumentOfPeriapsis = std::numeric_limits<Real>::quiet_NaN();
-
308 // keplerianElements[5] = trueLongitude;
-
309 // }
-
310
-
311 return keplerianElements;
-
312}
-
313
-
315
-
344template <typename Real, typename Vector6>
- -
346 const Vector6& keplerianElements, const Real gravitationalParameter,
-
347 const Real tolerance = 10.0 * std::numeric_limits<Real>::epsilon())
-
348{
-
349 Vector6 cartesianElements = keplerianElements;
-
350
-
351 const Real semiMajorAxis = keplerianElements[semiMajorAxisIndex];
-
352 const Real eccentricity = keplerianElements[eccentricityIndex];
-
353 const Real inclination = keplerianElements[inclinationIndex];
-
354 const Real argumentOfPeriapsis = keplerianElements[argumentOfPeriapsisIndex];
-
355 const Real longitudeOfAscendingNode = keplerianElements[longitudeOfAscendingNodeIndex];
-
356 const Real trueAnomaly = keplerianElements[trueAnomalyIndex];
-
357
-
358 // Pre-compute sines and cosines of angles for efficient computation.
-
359 const Real cosineOfInclination = std::cos(inclination);
-
360 const Real sineOfInclination = std::sin(inclination);
-
361 const Real cosineOfArgumentOfPeriapsis = std::cos(argumentOfPeriapsis);
-
362 const Real sineOfArgumentOfPeriapsis = std::sin(argumentOfPeriapsis);
-
363 const Real cosineOfLongitudeOfAscendingNode = std::cos(longitudeOfAscendingNode);
-
364 const Real sineOfLongitudeOfAscendingNode = std::sin(longitudeOfAscendingNode);
-
365 const Real cosineOfTrueAnomaly = std::cos(trueAnomaly);
-
366 const Real sineOfTrueAnomaly = std::sin(trueAnomaly);
-
367
-
368 // Compute semi-latus rectum in the case the orbit is not a parabola.
-
369 Real semiLatusRectum = 0.0;
-
370 if (std::fabs(eccentricity - 1.0) > tolerance)
-
371 {
-
372 semiLatusRectum = semiMajorAxis * (1.0 - eccentricity * eccentricity);
-
373 }
-
374
-
375 // Else set the semi-latus rectum as the first element in the vector of Keplerian elements.
-
376 else
-
377 {
-
378 semiLatusRectum = keplerianElements[0];
-
379 }
-
380
-
381 // Compute the magnitude of the orbital radius, measured from the focal point.
-
382 const Real radiusMagnitude = semiLatusRectum / (1.0 + eccentricity * cosineOfTrueAnomaly);
-
383
-
384 // Define position and velocity in the perifocal coordinate system.
-
385 const Real xPositionPerifocal = radiusMagnitude * cosineOfTrueAnomaly;
-
386 const Real yPositionPerifocal = radiusMagnitude * sineOfTrueAnomaly;
-
387 const Real xVelocityPerifocal
-
388 = -std::sqrt(gravitationalParameter / semiLatusRectum) * sineOfTrueAnomaly;
-
389 const Real yVelocityPerifocal
-
390 = std::sqrt(gravitationalParameter / semiLatusRectum)
-
391 * (eccentricity + cosineOfTrueAnomaly);
+
274 // // Special case: circular, equatorial
+
275 if (std::fabs(eccentricity) < tolerance && std::fabs(inclination) < tolerance)
+
276 {
+
277 argumentOfPeriapsis = std::numeric_limits<Real>::quiet_NaN();
+
278 longitudeOfAscendingNode = std::numeric_limits<Real>::quiet_NaN();
+
279 keplerianElements[5] = trueLongitude;
+
280 }
+
281
+
282 return keplerianElements;
+
283}
+
284
+
286
+
315template <typename Real, typename Vector6>
+ +
317 const Vector6& keplerianElements, const Real gravitationalParameter,
+
318 const Real tolerance = 10.0 * std::numeric_limits<Real>::epsilon())
+
319{
+
320 Vector6 cartesianElements = keplerianElements;
+
321
+
322 const Real semiMajorAxis = keplerianElements[semiMajorAxisIndex];
+
323 const Real eccentricity = keplerianElements[eccentricityIndex];
+
324 const Real inclination = keplerianElements[inclinationIndex];
+
325 const Real argumentOfPeriapsis = keplerianElements[argumentOfPeriapsisIndex];
+
326 const Real longitudeOfAscendingNode = keplerianElements[longitudeOfAscendingNodeIndex];
+
327 const Real trueAnomaly = keplerianElements[trueAnomalyIndex];
+
328
+
329 // Pre-compute sines and cosines of angles for efficient computation.
+
330 const Real cosineOfInclination = std::cos(inclination);
+
331 const Real sineOfInclination = std::sin(inclination);
+
332 const Real cosineOfArgumentOfPeriapsis = std::cos(argumentOfPeriapsis);
+
333 const Real sineOfArgumentOfPeriapsis = std::sin(argumentOfPeriapsis);
+
334 const Real cosineOfLongitudeOfAscendingNode = std::cos(longitudeOfAscendingNode);
+
335 const Real sineOfLongitudeOfAscendingNode = std::sin(longitudeOfAscendingNode);
+
336 const Real cosineOfTrueAnomaly = std::cos(trueAnomaly);
+
337 const Real sineOfTrueAnomaly = std::sin(trueAnomaly);
+
338
+
339 // Compute semi-latus rectum in the case the orbit is not a parabola.
+
340 Real semiLatusRectum = 0.0;
+
341 if (std::fabs(eccentricity - 1.0) > tolerance)
+
342 {
+
343 semiLatusRectum = semiMajorAxis * (1.0 - eccentricity * eccentricity);
+
344 }
+
345
+
346 // Else set the semi-latus rectum as the first element in the vector of Keplerian elements.
+
347 else
+
348 {
+
349 semiLatusRectum = keplerianElements[0];
+
350 }
+
351
+
352 // Compute the magnitude of the orbital radius, measured from the focal point.
+
353 const Real radiusMagnitude = semiLatusRectum / (1.0 + eccentricity * cosineOfTrueAnomaly);
+
354
+
355 // Define position and velocity in the perifocal coordinate system.
+
356 const Real xPositionPerifocal = radiusMagnitude * cosineOfTrueAnomaly;
+
357 const Real yPositionPerifocal = radiusMagnitude * sineOfTrueAnomaly;
+
358 const Real xVelocityPerifocal
+
359 = -std::sqrt(gravitationalParameter / semiLatusRectum) * sineOfTrueAnomaly;
+
360 const Real yVelocityPerifocal
+
361 = std::sqrt(gravitationalParameter / semiLatusRectum)
+
362 * (eccentricity + cosineOfTrueAnomaly);
+
363
+
364 // Compute scalar components of rotation matrix to rotate from periforcal to Earth-Centered
+
365 // Inertial (ECI) frame.
+
366 const Real rotationMatrixComponent11
+
367 = (cosineOfLongitudeOfAscendingNode * cosineOfArgumentOfPeriapsis
+
368 -sineOfLongitudeOfAscendingNode * sineOfArgumentOfPeriapsis * cosineOfInclination);
+
369 const Real rotationMatrixComponent12
+
370 = (-cosineOfLongitudeOfAscendingNode * sineOfArgumentOfPeriapsis
+
371 -sineOfLongitudeOfAscendingNode * cosineOfArgumentOfPeriapsis * cosineOfInclination);
+
372
+
373 const Real rotationMatrixComponent21
+
374 = (sineOfLongitudeOfAscendingNode * cosineOfArgumentOfPeriapsis
+
375 + cosineOfLongitudeOfAscendingNode * sineOfArgumentOfPeriapsis * cosineOfInclination);
+
376 const Real rotationMatrixComponent22
+
377 = (-sineOfLongitudeOfAscendingNode * sineOfArgumentOfPeriapsis
+
378 + cosineOfLongitudeOfAscendingNode * cosineOfArgumentOfPeriapsis * cosineOfInclination);
+
379
+
380 const Real rotationMatrixComponent31 = (sineOfArgumentOfPeriapsis * sineOfInclination);
+
381 const Real rotationMatrixComponent32 = (cosineOfArgumentOfPeriapsis * sineOfInclination);
+
382
+
383 // Compute Cartesian position and velocities.
+
384 cartesianElements[xPositionIndex] = rotationMatrixComponent11 * xPositionPerifocal
+
385 + rotationMatrixComponent12 * yPositionPerifocal;
+
386
+
387 cartesianElements[yPositionIndex] = rotationMatrixComponent21 * xPositionPerifocal
+
388 + rotationMatrixComponent22 * yPositionPerifocal;
+
389
+
390 cartesianElements[zPositionIndex] = rotationMatrixComponent31 * xPositionPerifocal
+
391 + rotationMatrixComponent32 * yPositionPerifocal;
392
-
393 // Compute scalar components of rotation matrix to rotate from periforcal to Earth-Centered
-
394 // Inertial (ECI) frame.
-
395 const Real rotationMatrixComponent11
-
396 = (cosineOfLongitudeOfAscendingNode * cosineOfArgumentOfPeriapsis
-
397 -sineOfLongitudeOfAscendingNode * sineOfArgumentOfPeriapsis * cosineOfInclination);
-
398 const Real rotationMatrixComponent12
-
399 = (-cosineOfLongitudeOfAscendingNode * sineOfArgumentOfPeriapsis
-
400 -sineOfLongitudeOfAscendingNode * cosineOfArgumentOfPeriapsis * cosineOfInclination);
+
393 cartesianElements[xVelocityIndex] = rotationMatrixComponent11 * xVelocityPerifocal
+
394 + rotationMatrixComponent12 * yVelocityPerifocal;
+
395
+
396 cartesianElements[yVelocityIndex] = rotationMatrixComponent21 * xVelocityPerifocal
+
397 + rotationMatrixComponent22 * yVelocityPerifocal;
+
398
+
399 cartesianElements[zVelocityIndex] = rotationMatrixComponent31 * xVelocityPerifocal
+
400 + rotationMatrixComponent32 * yVelocityPerifocal;
401
-
402 const Real rotationMatrixComponent21
-
403 = (sineOfLongitudeOfAscendingNode * cosineOfArgumentOfPeriapsis
-
404 + cosineOfLongitudeOfAscendingNode * sineOfArgumentOfPeriapsis * cosineOfInclination);
-
405 const Real rotationMatrixComponent22
-
406 = (-sineOfLongitudeOfAscendingNode * sineOfArgumentOfPeriapsis
-
407 + cosineOfLongitudeOfAscendingNode * cosineOfArgumentOfPeriapsis * cosineOfInclination);
-
408
-
409 const Real rotationMatrixComponent31 = (sineOfArgumentOfPeriapsis * sineOfInclination);
-
410 const Real rotationMatrixComponent32 = (cosineOfArgumentOfPeriapsis * sineOfInclination);
-
411
-
412 // Compute Cartesian position and velocities.
-
413 cartesianElements[xPositionIndex] = rotationMatrixComponent11 * xPositionPerifocal
-
414 + rotationMatrixComponent12 * yPositionPerifocal;
-
415
-
416 cartesianElements[yPositionIndex] = rotationMatrixComponent21 * xPositionPerifocal
-
417 + rotationMatrixComponent22 * yPositionPerifocal;
-
418
-
419 cartesianElements[zPositionIndex] = rotationMatrixComponent31 * xPositionPerifocal
-
420 + rotationMatrixComponent32 * yPositionPerifocal;
-
421
-
422 cartesianElements[xVelocityIndex] = rotationMatrixComponent11 * xVelocityPerifocal
-
423 + rotationMatrixComponent12 * yVelocityPerifocal;
+
402 return cartesianElements;
+
403}
+
404
+
406
+
419template <typename Real>
+ +
421 const Real eccentricity)
+
422{
+
423 assert(eccentricity >= 0.0 && eccentricity < 1.0);
424
-
425 cartesianElements[yVelocityIndex] = rotationMatrixComponent21 * xVelocityPerifocal
-
426 + rotationMatrixComponent22 * yVelocityPerifocal;
-
427
-
428 cartesianElements[zVelocityIndex] = rotationMatrixComponent31 * xVelocityPerifocal
-
429 + rotationMatrixComponent32 * yVelocityPerifocal;
-
430
-
431 return cartesianElements;
-
432}
-
433
-
435
-
448template <typename Real>
- -
450 const Real eccentricity)
-
451{
-
452 assert(eccentricity >= 0.0 && eccentricity < 1.0);
-
453
-
454 // Compute sine and cosine of eccentric anomaly.
-
455 const Real sineOfEccentricAnomaly
-
456 = std::sqrt(1.0 - std::pow(eccentricity, 2.0))
-
457 * std::sin(trueAnomaly) / (1.0 + eccentricity * std::cos(trueAnomaly));
-
458 const Real cosineOfEccentricAnomaly
-
459 = (eccentricity + std::cos(trueAnomaly))
-
460 / (1.0 + eccentricity * std::cos(trueAnomaly));
-
461
-
462 // Return elliptical eccentric anomaly.
-
463 return std::atan2(sineOfEccentricAnomaly, cosineOfEccentricAnomaly);
-
464}
+
425 // Compute sine and cosine of eccentric anomaly.
+
426 const Real sineOfEccentricAnomaly
+
427 = std::sqrt(1.0 - std::pow(eccentricity, 2.0))
+
428 * std::sin(trueAnomaly) / (1.0 + eccentricity * std::cos(trueAnomaly));
+
429 const Real cosineOfEccentricAnomaly
+
430 = (eccentricity + std::cos(trueAnomaly))
+
431 / (1.0 + eccentricity * std::cos(trueAnomaly));
+
432
+
433 // Return elliptical eccentric anomaly.
+
434 return std::atan2(sineOfEccentricAnomaly, cosineOfEccentricAnomaly);
+
435}
+
436
+
438
+
452template <typename Real>
+ +
454 const Real eccentricity)
+
455{
+
456 assert(eccentricity > 1.0);
+
457
+
458 // Compute hyperbolic sine and hyperbolic cosine of hyperbolic eccentric anomaly.
+
459 const Real hyperbolicSineOfHyperbolicEccentricAnomaly
+
460 = std::sqrt(std::pow(eccentricity, 2.0) - 1.0)
+
461 * std::sin(trueAnomaly) / (1.0 + std::cos(trueAnomaly));
+
462
+
463 const Real hyperbolicCosineOfHyperbolicEccentricAnomaly
+
464 = (std::cos(trueAnomaly) + eccentricity) / (1.0 + std::cos(trueAnomaly));
465
-
467
-
481template <typename Real>
- -
483 const Real eccentricity)
-
484{
-
485 assert(eccentricity > 1.0);
-
486
-
487 // Compute hyperbolic sine and hyperbolic cosine of hyperbolic eccentric anomaly.
-
488 const Real hyperbolicSineOfHyperbolicEccentricAnomaly
-
489 = std::sqrt(std::pow(eccentricity, 2.0) - 1.0)
-
490 * std::sin(trueAnomaly) / (1.0 + std::cos(trueAnomaly));
-
491
-
492 const Real hyperbolicCosineOfHyperbolicEccentricAnomaly
-
493 = (std::cos(trueAnomaly) + eccentricity) / (1.0 + std::cos(trueAnomaly));
-
494
-
495 // Return hyperbolic eccentric anomaly.
-
496 // The inverse hyperbolic tangent is computed here manually, since the atanh() function is not
-
497 // available in older C++ compilers.
-
498 const Real angle
-
499 = hyperbolicSineOfHyperbolicEccentricAnomaly
-
500 / hyperbolicCosineOfHyperbolicEccentricAnomaly;
-
501 return 0.5 * (std::log(1.0 + angle) - std::log(1.0 - angle));
-
502}
-
503
-
505
-
523template <typename Real>
-
524Real convertTrueAnomalyToEccentricAnomaly(const Real trueAnomaly, const Real eccentricity)
-
525{
-
526 assert(eccentricity >= 0.0
-
527 && (std::fabs(eccentricity - 1.0) > std::numeric_limits<Real>::epsilon()));
-
528
-
529 Real eccentricAnomaly = 0.0;
-
530
-
531 // Check if orbit is elliptical and compute eccentric anomaly.
-
532 if (eccentricity >= 0.0 && eccentricity < 1.0)
-
533 {
-
534 eccentricAnomaly
-
535 = convertTrueAnomalyToEllipticalEccentricAnomaly(trueAnomaly, eccentricity);
-
536 }
-
537
-
538 // Check if orbit is hyperbolic and compute eccentric anomaly.
-
539 else if (eccentricity > 1.0)
-
540 {
-
541 eccentricAnomaly
-
542 = convertTrueAnomalyToHyperbolicEccentricAnomaly(trueAnomaly, eccentricity);
-
543 }
-
544
-
545 return eccentricAnomaly;
-
546}
-
547
-
549
-
562template <typename Real>
-
563Real convertEllipticalEccentricAnomalyToMeanAnomaly(const Real ellipticalEccentricAnomaly,
-
564 const Real eccentricity)
-
565{
-
566 assert(eccentricity >= 0.0 && eccentricity < 1.0);
+
466 // Return hyperbolic eccentric anomaly.
+
467 // The inverse hyperbolic tangent is computed here manually, since the atanh() function is not
+
468 // available in older C++ compilers.
+
469 const Real angle
+
470 = hyperbolicSineOfHyperbolicEccentricAnomaly
+
471 / hyperbolicCosineOfHyperbolicEccentricAnomaly;
+
472 return 0.5 * (std::log(1.0 + angle) - std::log(1.0 - angle));
+
473}
+
474
+
476
+
494template <typename Real>
+
495Real convertTrueAnomalyToEccentricAnomaly(const Real trueAnomaly, const Real eccentricity)
+
496{
+
497 assert(eccentricity >= 0.0
+
498 && (std::fabs(eccentricity - 1.0) > std::numeric_limits<Real>::epsilon()));
+
499
+
500 Real eccentricAnomaly = 0.0;
+
501
+
502 // Check if orbit is elliptical and compute eccentric anomaly.
+
503 if (eccentricity >= 0.0 && eccentricity < 1.0)
+
504 {
+
505 eccentricAnomaly
+
506 = convertTrueAnomalyToEllipticalEccentricAnomaly(trueAnomaly, eccentricity);
+
507 }
+
508
+
509 // Check if orbit is hyperbolic and compute eccentric anomaly.
+
510 else if (eccentricity > 1.0)
+
511 {
+
512 eccentricAnomaly
+
513 = convertTrueAnomalyToHyperbolicEccentricAnomaly(trueAnomaly, eccentricity);
+
514 }
+
515
+
516 return eccentricAnomaly;
+
517}
+
518
+
520
+
533template <typename Real>
+
534Real convertEllipticalEccentricAnomalyToMeanAnomaly(const Real ellipticalEccentricAnomaly,
+
535 const Real eccentricity)
+
536{
+
537 assert(eccentricity >= 0.0 && eccentricity < 1.0);
+
538
+
539 return ellipticalEccentricAnomaly - eccentricity * std::sin(ellipticalEccentricAnomaly);
+
540}
+
541
+
543
+
557template <typename Real>
+ +
559 const Real hyperbolicEccentricAnomaly, const Real eccentricity)
+
560{
+
561 assert(eccentricity > 1.0);
+
562
+
563 return eccentricity * std::sinh(hyperbolicEccentricAnomaly) - hyperbolicEccentricAnomaly;
+
564}
+
565
567
-
568 return ellipticalEccentricAnomaly - eccentricity * std::sin(ellipticalEccentricAnomaly);
-
569}
-
570
-
572
-
586template <typename Real>
- -
588 const Real hyperbolicEccentricAnomaly, const Real eccentricity)
-
589{
-
590 assert(eccentricity > 1.0);
+
585template <typename Real>
+ +
587 const Real eccentricAnomaly, const Real eccentricity)
+
588{
+
589 assert(eccentricity >= 0.0
+
590 && std::fabs(eccentricity - 1.0) > std::numeric_limits<Real>::epsilon());
591
-
592 return eccentricity * std::sinh(hyperbolicEccentricAnomaly) - hyperbolicEccentricAnomaly;
-
593}
-
594
-
596
-
614template <typename Real>
- -
616 const Real eccentricAnomaly, const Real eccentricity)
-
617{
-
618 assert(eccentricity >= 0.0
-
619 && std::fabs(eccentricity - 1.0) > std::numeric_limits<Real>::epsilon());
-
620
-
621 Real meanAnomaly = 0.0;
-
622
-
623 // Check if orbit is elliptical and compute mean anomaly.
-
624 if (eccentricity >= 0.0 && eccentricity < 1.0)
-
625 {
-
626 meanAnomaly
-
627 = convertEllipticalEccentricAnomalyToMeanAnomaly(eccentricAnomaly, eccentricity);
-
628 }
-
629
-
630 // Check if orbit is hyperbolic and compute mean anomaly.
-
631 else if (eccentricity > 1.0)
-
632 {
-
633 meanAnomaly
-
634 = convertHyperbolicEccentricAnomalyToMeanAnomaly(eccentricAnomaly, eccentricity);
-
635 }
-
636
-
637 return meanAnomaly;
-
638}
-
639
-
641
-
650template <typename Real>
-
651Real convertEllipticalEccentricAnomalyToTrueAnomaly(const Real ellipticEccentricAnomaly,
-
652 const Real eccentricity)
-
653{
-
654 const Real sineOfTrueAnomaly = std::sqrt(1.0 - eccentricity * eccentricity)
-
655 * std::sin(ellipticEccentricAnomaly)
-
656 / (1.0 - eccentricity * std::cos(ellipticEccentricAnomaly));
-
657
-
658 const Real cosineOfTrueAnomaly
-
659 = (std::cos(ellipticEccentricAnomaly) - eccentricity)
-
660 / (1.0 - eccentricity * std::cos(ellipticEccentricAnomaly));
+
592 Real meanAnomaly = 0.0;
+
593
+
594 // Check if orbit is elliptical and compute mean anomaly.
+
595 if (eccentricity >= 0.0 && eccentricity < 1.0)
+
596 {
+
597 meanAnomaly
+
598 = convertEllipticalEccentricAnomalyToMeanAnomaly(eccentricAnomaly, eccentricity);
+
599 }
+
600
+
601 // Check if orbit is hyperbolic and compute mean anomaly.
+
602 else if (eccentricity > 1.0)
+
603 {
+
604 meanAnomaly
+
605 = convertHyperbolicEccentricAnomalyToMeanAnomaly(eccentricAnomaly, eccentricity);
+
606 }
+
607
+
608 return meanAnomaly;
+
609}
+
610
+
612
+
621template <typename Real>
+
622Real convertEllipticalEccentricAnomalyToTrueAnomaly(const Real ellipticEccentricAnomaly,
+
623 const Real eccentricity)
+
624{
+
625 const Real sineOfTrueAnomaly = std::sqrt(1.0 - eccentricity * eccentricity)
+
626 * std::sin(ellipticEccentricAnomaly)
+
627 / (1.0 - eccentricity * std::cos(ellipticEccentricAnomaly));
+
628
+
629 const Real cosineOfTrueAnomaly
+
630 = (std::cos(ellipticEccentricAnomaly) - eccentricity)
+
631 / (1.0 - eccentricity * std::cos(ellipticEccentricAnomaly));
+
632
+
633 return std::atan2(sineOfTrueAnomaly, cosineOfTrueAnomaly);
+
634}
+
635
+
637
+
646template <typename Real>
+
647Real convertHyperbolicEccentricAnomalyToTrueAnomaly(const Real hyperbolicEccentricAnomaly,
+
648 const Real eccentricity)
+
649{
+
650 const Real sineOfTrueAnomaly
+
651 = std::sqrt(eccentricity * eccentricity - 1.0)
+
652 * std::sinh(hyperbolicEccentricAnomaly)
+
653 / (eccentricity * std::cosh(hyperbolicEccentricAnomaly) - 1.0);
+
654
+
655 const Real cosineOfTrueAnomaly
+
656 = (eccentricity - std::cosh(hyperbolicEccentricAnomaly))
+
657 / (eccentricity * std::cosh(hyperbolicEccentricAnomaly) - 1.0);
+
658
+
659 return std::atan2(sineOfTrueAnomaly, cosineOfTrueAnomaly);
+
660}
661
-
662 return std::atan2(sineOfTrueAnomaly, cosineOfTrueAnomaly);
-
663}
-
664
-
666
-
675template <typename Real>
-
676Real convertHyperbolicEccentricAnomalyToTrueAnomaly(const Real hyperbolicEccentricAnomaly,
-
677 const Real eccentricity)
-
678{
-
679 const Real sineOfTrueAnomaly
-
680 = std::sqrt(eccentricity * eccentricity - 1.0)
-
681 * std::sinh(hyperbolicEccentricAnomaly)
-
682 / (eccentricity * std::cosh(hyperbolicEccentricAnomaly) - 1.0);
-
683
-
684 const Real cosineOfTrueAnomaly
-
685 = (eccentricity - std::cosh(hyperbolicEccentricAnomaly))
-
686 / (eccentricity * std::cosh(hyperbolicEccentricAnomaly) - 1.0);
-
687
-
688 return std::atan2(sineOfTrueAnomaly, cosineOfTrueAnomaly);
-
689}
-
690
-
692
-
710template <typename Real>
-
711Real convertEccentricAnomalyToTrueAnomaly(const Real eccentricAnomaly, const Real eccentricity)
-
712{
-
713 assert(eccentricity >= 0.0
-
714 && std::fabs(eccentricity - 1.0) > std::numeric_limits<Real>::epsilon());
-
715
-
716 Real trueAnomaly = 0.0;
-
717
-
718 // Check if orbit is elliptical and compute true anomaly.
-
719 if (eccentricity < 1.0)
-
720 {
-
721 trueAnomaly = convertEllipticalEccentricAnomalyToTrueAnomaly(eccentricAnomaly,
-
722 eccentricity);
-
723 }
-
724
-
725 else if (eccentricity > 1.0)
-
726 {
-
727 trueAnomaly = convertHyperbolicEccentricAnomalyToTrueAnomaly(eccentricAnomaly,
-
728 eccentricity);
-
729 }
-
730
-
731 return trueAnomaly;
-
732}
-
733
-
735
-
756template <typename Real>
-
757Real computeEllipticalKeplerFunction(const Real eccentricAnomaly,
-
758 const Real eccentricity,
-
759 const Real meanAnomaly)
-
760{
-
761 return eccentricAnomaly - eccentricity * std::sin(eccentricAnomaly) - meanAnomaly;
-
762}
-
763
-
765
-
782template <typename Real>
-
783Real computeFirstDerivativeEllipticalKeplerFunction(const Real eccentricAnomaly,
-
784 const Real eccentricity)
-
785{
-
786 return 1.0 - eccentricity * std::cos(eccentricAnomaly);
-
787}
-
788
-
790
-
812template <typename Real, typename Integer>
- -
814 const Real eccentricity,
-
815 const Real meanAnomaly,
-
816 const Real rootFindingTolerance = 1.0e-3 * std::numeric_limits<Real>::epsilon(),
-
817 const Integer maximumIterations = 100)
-
818{
-
819 assert(eccentricity >= 0.0 && eccentricity < (1.0 - 1.0e-11));
-
820
-
821 const Real pi = 3.14159265358979323846;
-
822
-
823 // Set mean anomaly to domain between 0 and 2pi.
-
824 Real meanAnomalyShifted = std::fmod(meanAnomaly, 2.0 * pi);
-
825 if (meanAnomalyShifted <0.0)
-
826 {
-
827 meanAnomalyShifted += 2.0 * pi;
-
828 }
-
829
-
830 Real eccentricAnomaly = std::numeric_limits<Real>::quiet_NaN();
-
831
-
832 // Set the initial guess for the eccentric anomaly.
-
833 // !!!!!!!!!!!!! IMPORTANT !!!!!!!!!!!!!
-
834 // If this scheme is changed, please run a very extensive test suite. The Newton-Raphson
-
835 // root-finding scheme tends to be chaotic for very specific combinations of mean anomaly
-
836 // and eccentricity. Various random tests of 100,000,000 samples were done to verify the
-
837 // default scheme for the initial guess. (Musegaas, 2012).
-
838 Real initialGuess = 0.0;
-
839 if (meanAnomalyShifted > pi)
-
840 {
-
841 initialGuess = meanAnomalyShifted - eccentricity;
-
842 }
-
843 else
-
844 {
-
845 initialGuess = meanAnomalyShifted + eccentricity;
-
846 }
-
847
-
848 // Execute Newton-Raphson root-finding algorithm.
-
849 eccentricAnomaly = initialGuess;
-
850 for (int i = 0; i < maximumIterations + 1; ++i)
-
851 {
-
852 if (i == maximumIterations)
-
853 {
-
854 throw std::runtime_error(
-
855 "ERROR: Maximum iterations for Newton-Raphson root-finding exceeded!");
-
856 }
-
857
-
858 const Real nextEccentricAnomaly
-
859 = eccentricAnomaly
-
860 - computeEllipticalKeplerFunction(eccentricAnomaly,
-
861 eccentricity,
-
862 meanAnomalyShifted)
- -
864 eccentricity);
-
865
-
866 const Real eccentricAnomalyDifference = eccentricAnomaly - nextEccentricAnomaly;
-
867
-
868 eccentricAnomaly = nextEccentricAnomaly;
-
869
-
870 if (eccentricAnomalyDifference < rootFindingTolerance)
-
871 {
-
872 break;
-
873 }
-
874 }
-
875
-
876 // Return eccentric anomaly.
-
877 return eccentricAnomaly;
-
878}
-
879
-
880} // namespace astro
-
881
+
663
+
681template <typename Real>
+
682Real convertEccentricAnomalyToTrueAnomaly(const Real eccentricAnomaly, const Real eccentricity)
+
683{
+
684 assert(eccentricity >= 0.0
+
685 && std::fabs(eccentricity - 1.0) > std::numeric_limits<Real>::epsilon());
+
686
+
687 Real trueAnomaly = 0.0;
+
688
+
689 // Check if orbit is elliptical and compute true anomaly.
+
690 if (eccentricity < 1.0)
+
691 {
+
692 trueAnomaly = convertEllipticalEccentricAnomalyToTrueAnomaly(eccentricAnomaly,
+
693 eccentricity);
+
694 }
+
695
+
696 else if (eccentricity > 1.0)
+
697 {
+
698 trueAnomaly = convertHyperbolicEccentricAnomalyToTrueAnomaly(eccentricAnomaly,
+
699 eccentricity);
+
700 }
+
701
+
702 return trueAnomaly;
+
703}
+
704
+
706
+
727template <typename Real>
+
728Real computeEllipticalKeplerFunction(const Real eccentricAnomaly,
+
729 const Real eccentricity,
+
730 const Real meanAnomaly)
+
731{
+
732 return eccentricAnomaly - eccentricity * std::sin(eccentricAnomaly) - meanAnomaly;
+
733}
+
734
+
736
+
753template <typename Real>
+
754Real computeFirstDerivativeEllipticalKeplerFunction(const Real eccentricAnomaly,
+
755 const Real eccentricity)
+
756{
+
757 return 1.0 - eccentricity * std::cos(eccentricAnomaly);
+
758}
+
759
+
761
+
783template <typename Real, typename Integer>
+ +
785 const Real eccentricity,
+
786 const Real meanAnomaly,
+
787 const Real rootFindingTolerance = 1.0e-3 * std::numeric_limits<Real>::epsilon(),
+
788 const Integer maximumIterations = 100)
+
789{
+
790 assert(eccentricity >= 0.0 && eccentricity < (1.0 - 1.0e-11));
+
791
+
792 const Real pi = 3.14159265358979323846;
+
793
+
794 // Set mean anomaly to domain between 0 and 2pi.
+
795 Real meanAnomalyShifted = std::fmod(meanAnomaly, 2.0 * pi);
+
796 if (meanAnomalyShifted <0.0)
+
797 {
+
798 meanAnomalyShifted += 2.0 * pi;
+
799 }
+
800
+
801 Real eccentricAnomaly = std::numeric_limits<Real>::quiet_NaN();
+
802
+
803 // Set the initial guess for the eccentric anomaly.
+
804 // !!!!!!!!!!!!! IMPORTANT !!!!!!!!!!!!!
+
805 // If this scheme is changed, please run a very extensive test suite. The Newton-Raphson
+
806 // root-finding scheme tends to be chaotic for very specific combinations of mean anomaly
+
807 // and eccentricity. Various random tests of 100,000,000 samples were done to verify the
+
808 // default scheme for the initial guess. (Musegaas, 2012).
+
809 Real initialGuess = 0.0;
+
810 if (meanAnomalyShifted > pi)
+
811 {
+
812 initialGuess = meanAnomalyShifted - eccentricity;
+
813 }
+
814 else
+
815 {
+
816 initialGuess = meanAnomalyShifted + eccentricity;
+
817 }
+
818
+
819 // Execute Newton-Raphson root-finding algorithm.
+
820 eccentricAnomaly = initialGuess;
+
821 for (int i = 0; i < maximumIterations + 1; ++i)
+
822 {
+
823 if (i == maximumIterations)
+
824 {
+
825 throw std::runtime_error(
+
826 "ERROR: Maximum iterations for Newton-Raphson root-finding exceeded!");
+
827 }
+
828
+
829 const Real nextEccentricAnomaly
+
830 = eccentricAnomaly
+
831 - computeEllipticalKeplerFunction(eccentricAnomaly,
+
832 eccentricity,
+
833 meanAnomalyShifted)
+ +
835 eccentricity);
+
836
+
837 const Real eccentricAnomalyDifference = eccentricAnomaly - nextEccentricAnomaly;
+
838
+
839 eccentricAnomaly = nextEccentricAnomaly;
+
840
+
841 if (eccentricAnomalyDifference < rootFindingTolerance)
+
842 {
+
843 break;
+
844 }
+
845 }
+
846
+
847 // Return eccentric anomaly.
+
848 return eccentricAnomaly;
+
849}
+
850
+
851} // namespace astro
+
852
-
Real convertEccentricAnomalyToTrueAnomaly(const Real eccentricAnomaly, const Real eccentricity)
Convert eccentric anomaly to true anomaly.
-
Vector6 convertKeplerianToCartesianElements(const Vector6 &keplerianElements, const Real gravitationalParameter, const Real tolerance=10.0 *std::numeric_limits< Real >::epsilon())
Convert Keplerian elements to Cartesian elements.
-
Real convertHyperbolicEccentricAnomalyToMeanAnomaly(const Real hyperbolicEccentricAnomaly, const Real eccentricity)
Convert hyperbolic eccentric anomaly to mean anomaly.
-
Real convertEllipticalEccentricAnomalyToTrueAnomaly(const Real ellipticEccentricAnomaly, const Real eccentricity)
Convert elliptical eccentric anomaly to true anomaly.
-
Real convertTrueAnomalyToEccentricAnomaly(const Real trueAnomaly, const Real eccentricity)
Convert true anomaly to eccentric anomaly.
-
Real convertHyperbolicEccentricAnomalyToTrueAnomaly(const Real hyperbolicEccentricAnomaly, const Real eccentricity)
Convert hyperbolic eccentric anomaly to true anomaly.
-
Real convertTrueAnomalyToEllipticalEccentricAnomaly(const Real trueAnomaly, const Real eccentricity)
Convert true anomaly to elliptical eccentric anomaly.
-
Real computeFirstDerivativeEllipticalKeplerFunction(const Real eccentricAnomaly, const Real eccentricity)
Compute 1st-derivative of Kepler function for elliptical orbits.
-
Real convertTrueAnomalyToHyperbolicEccentricAnomaly(const Real trueAnomaly, const Real eccentricity)
Convert true anomaly to hyperbolic eccentric anomaly.
-
Real convertEccentricAnomalyToMeanAnomaly(const Real eccentricAnomaly, const Real eccentricity)
Convert eccentric anomaly to mean anomaly.
-
Real computeEllipticalKeplerFunction(const Real eccentricAnomaly, const Real eccentricity, const Real meanAnomaly)
Compute Kepler function for elliptical orbits.
-
Vector6 convertCartesianToKeplerianElements(const Vector6 &cartesianElements, const Real gravitationalParameter, const Real tolerance=10.0 *std::numeric_limits< Real >::epsilon())
Convert Cartesian elements to Keplerian elements.
-
Real convertEllipticalEccentricAnomalyToMeanAnomaly(const Real ellipticalEccentricAnomaly, const Real eccentricity)
Convert elliptical eccentric anomaly to mean anomaly.
+
Real convertEccentricAnomalyToTrueAnomaly(const Real eccentricAnomaly, const Real eccentricity)
Convert eccentric anomaly to true anomaly.
+
Vector6 convertKeplerianToCartesianElements(const Vector6 &keplerianElements, const Real gravitationalParameter, const Real tolerance=10.0 *std::numeric_limits< Real >::epsilon())
Convert Keplerian elements to Cartesian elements.
+
Real convertHyperbolicEccentricAnomalyToMeanAnomaly(const Real hyperbolicEccentricAnomaly, const Real eccentricity)
Convert hyperbolic eccentric anomaly to mean anomaly.
+
Real convertEllipticalEccentricAnomalyToTrueAnomaly(const Real ellipticEccentricAnomaly, const Real eccentricity)
Convert elliptical eccentric anomaly to true anomaly.
+
Real convertTrueAnomalyToEccentricAnomaly(const Real trueAnomaly, const Real eccentricity)
Convert true anomaly to eccentric anomaly.
+
Real convertHyperbolicEccentricAnomalyToTrueAnomaly(const Real hyperbolicEccentricAnomaly, const Real eccentricity)
Convert hyperbolic eccentric anomaly to true anomaly.
+
Real convertTrueAnomalyToEllipticalEccentricAnomaly(const Real trueAnomaly, const Real eccentricity)
Convert true anomaly to elliptical eccentric anomaly.
+
Real computeFirstDerivativeEllipticalKeplerFunction(const Real eccentricAnomaly, const Real eccentricity)
Compute 1st-derivative of Kepler function for elliptical orbits.
+
Real convertTrueAnomalyToHyperbolicEccentricAnomaly(const Real trueAnomaly, const Real eccentricity)
Convert true anomaly to hyperbolic eccentric anomaly.
+
Real convertEccentricAnomalyToMeanAnomaly(const Real eccentricAnomaly, const Real eccentricity)
Convert eccentric anomaly to mean anomaly.
+
Real computeEllipticalKeplerFunction(const Real eccentricAnomaly, const Real eccentricity, const Real meanAnomaly)
Compute Kepler function for elliptical orbits.
+
Vector6 convertCartesianToKeplerianElements(const Vector6 &cartesianElements, const Real gravitationalParameter, const Real tolerance=10.0 *std::numeric_limits< Real >::epsilon())
Convert Cartesian elements to Keplerian elements.
+
Real convertEllipticalEccentricAnomalyToMeanAnomaly(const Real ellipticalEccentricAnomaly, const Real eccentricity)
Convert elliptical eccentric anomaly to mean anomaly.
+ +
@ longitudeOfAscendingNodeIndex
-
Real convertEllipticalMeanAnomalyToEccentricAnomaly(const Real eccentricity, const Real meanAnomaly, const Real rootFindingTolerance=1.0e-3 *std::numeric_limits< Real >::epsilon(), const Integer maximumIterations=100)
Convert elliptical mean anomaly to eccentric anomaly.
+
Real convertEllipticalMeanAnomalyToEccentricAnomaly(const Real eccentricity, const Real meanAnomaly, const Real rootFindingTolerance=1.0e-3 *std::numeric_limits< Real >::epsilon(), const Integer maximumIterations=100)
Convert elliptical mean anomaly to eccentric anomaly.