13#ifndef ASTRO_ORBITAL_ELEMENTS_HXX
14#define ASTRO_ORBITAL_ELEMENTS_HXX
20 POSIGRADE = 1, UNDEFINED = 0, RETROGRADE = -1
25 UNDEFINED = 0, HYPERBOLIC = 1, ELLIPTIC = 2, PARABOLIC = 3
82 r(r_x, r_y, r_z),
v(v_x, v_y, v_z) {}
109 std::ostringstream os;
111 "r = " << this->
r.transpose() <<
" (UA)" << std::endl <<
112 "v = " << this->
v.transpose() <<
" (UA/day)" << std::endl;
134 #define CMD "Astro::OrbitalElements::Cartesian::sanity_check(...) "
136 if (!(this->
r.allFinite())) {
140 if (!(this->
v.allFinite())) {
164 return ((this->
v.cross(this->h()) / mu) - (this->r / this->r.norm())).norm();
242 std::ostringstream os;
244 "a : semi-major axis = " << this->
a <<
" (UA)" << std::endl <<
245 "e : eccentricity = " << this->
e <<
" (-)" << std::endl <<
246 "i : inclination = " << this->
i <<
" (rad) = " <<
rad_to_deg(this->
i) <<
" (deg)" << std::endl <<
247 "Ω : right ascension … = " << this->
Omega <<
" (rad) = " <<
rad_to_deg(this->
Omega) <<
" (deg)" << std::endl <<
248 "ω : arg. of periapsis = " << this->
omega <<
" (rad) = " <<
rad_to_deg(this->
omega) <<
" (deg)" << std::endl;
278 #define CMD "Astro::OrbitalElements::Keplerian::sanity_check(...) "
280 if (!std::isfinite(this->
a) && this->
a > 0.0) {
284 if (!std::isfinite(this->
e) && this->
e > 0.0 && this->
e < 1.0) {
288 if (!std::isfinite(this->
i)) {
292 if (!std::isfinite(this->
Omega)) {
296 if (!std::isfinite(this->
omega)) {
315 #define CMD "Astro::OrbitalElements::Keplerian::is_singular(...) "
322 if (this->
e > 1.0 - tol_e) {
353 Real p()
const {
return this->
a * (1.0 - this->
e * this->
e);}
404 :
p(t_p),
f(t_f),
g(t_g),
h(t_h),
k(t_k) {}
431 std::ostringstream os;
433 "p : semi-latus rectum = " << this->
p <<
" (UA)" << std::endl <<
434 "f : x-axis ecc. vector = " << this->
f <<
" (-)" << std::endl <<
435 "g : y-axis ecc. vector = " << this->
g <<
" (-)" << std::endl <<
436 "h : x-axis node vector = " << this->
h <<
" (-)" << std::endl <<
437 "k : y-axis node vector = " << this->
k <<
" (-)" << std::endl;
464 #define CMD "Astro::OrbitalElements::Keplerian::sanity_check(...) "
466 if (!std::isfinite(this->
p) && this->
p > 0.0) {
470 if (!std::isfinite(this->
f)) {
471 ASTRO_WARNING(
CMD "invalid x-axis component of the eccentricity vector, f = " << this->
f <<
".");
474 if (!std::isfinite(this->
g)) {
475 ASTRO_WARNING(
CMD "invalid y-axis component of the eccentricity vector, g = " << this->
g <<
".");
478 if (!std::isfinite(this->
h)) {
479 ASTRO_WARNING(
CMD "invalid x-axis component of the node vector, h = " << this->
h <<
".");
482 if (!std::isfinite(this->
k)) {
483 ASTRO_WARNING(
CMD "invalid y-axis component of the node vector, k = " << this->
k <<
".");
503 #define CMD "Astro::OrbitalElements::Keplerian::is_singular(...) "
533 Real s_L{std::sin(L)}, c_L{std::cos(L)};
534 return std::atan2(this->
h*s_L - this->
k*c_L, this->
h*c_L + this->
k*s_L);
541 Real a()
const {
return this->
p / (1.0 - this->
f*this->
f - this->
g*this->
g);}
547 Real e()
const {
return std::sqrt(this->
f*this->
f + this->
g*this->
g);}
555 Real h2{this->
h * this->
h}, k2{this->
k * this->
k};
556 return std::atan2(2.0*std::sqrt(h2 + k2), 1.0 - h2 - k2);
566 this->
g*this->
h - this->
f*this->
k,
567 this->
f*this->
h + this->
g*this->k
622 :
q(t_q_1, t_q_2, t_q_3, t_q_4) {}
648 r << 1.0 - 2.0*(
q.y()*
q.y() +
q.z()*
q.z()),
649 2.0*(
q.x()*
q.y() -
q.z()*
q.w()),
650 2.0*(
q.x()*
q.z() +
q.y()*
q.w()),
651 2.0*(
q.x()*
q.y() +
q.z()*
q.w()),
652 1.0 - 2.0*(
q.x()*
q.x() +
q.z()*
q.z()),
653 2.0*(
q.y()*
q.z() -
q.x()*
q.w()),
654 2.0*(
q.x()*
q.z() -
q.y()*
q.w()),
655 2.0*(
q.y()*
q.z() +
q.x()*
q.w()),
656 1.0 - 2.0*(
q.x()*
q.x() +
q.y()*
q.y());
665 std::ostringstream os;
667 "q¹ : 1st parameter = " << this->
q.x() <<
" (-)" << std::endl <<
668 "q² : 2nd parameter = " << this->
q.y() <<
" (-)" << std::endl <<
669 "q³ : 3rd parameter = " << this->
q.z() <<
" (-)" << std::endl <<
670 "q⁴ : 4th parameter = " << this->
q.w() <<
" (-)" << std::endl;
691 #define CMD "Astro::OrbitalElements::Quaternionic::sanity_check(...) "
693 if (!(std::isfinite(this->
q.x()) && std::isfinite(this->q.y()) &&
694 std::isfinite(this->q.z()) && std::isfinite(this->q.w()))) {
720 Real beta{(1.0 + std::sqrt(1.0 - e*e)) / e};
721 return nu - 2.0 * std::atan(std::sin(nu) / (beta + std::cos(nu))) -
722 (e * std::sqrt(1.0 - e*e) * std::sin(nu)) / (1.0 + e * std::cos(nu));
739 Real beta{(1.0 + std::sqrt(1.0 - kepl.
e*kepl.
e)) / kepl.
e};
740 return nu - 2.0 * std::atan(std::sin(nu) / (beta + std::cos(nu)));
766 #define CMD "Astro::OrbitalElements::Anomaly::M_to_E(...): "
772 Real dE{0.0}, E{M}, e{kepl.
e};
773 for (
Integer k{0}; k < 100; ++k)
775 dE = (E - e * std::sin(E) - M) / (1.0 - e * std::cos(E));
777 E -= std::max(std::min(dE, 0.1), -0.1);;
783 ", dE = " << dE <<
", M = " << M <<
", e = " << e <<
".");
803 #define CMD "Astro::OrbitalElements::Anomaly::M_to_H(...): "
806 Real e{kepl.
e}, abs_M{M > 0 ? M : -M};
807 Real dH{0.0}, H{5.0*e-2.5 > abs_M ? std::pow(6.0*abs_M/e, 1.0/3.0) : std::log(2.0*abs_M/e)};
808 for (
Integer k{0}; k < 100; ++k)
810 dH = (e * std::sinh(H) - H - abs_M) / (e * std::cosh(H) - 1.0);
817 ", dH = " << dH <<
", M = " << M <<
", e = " << e <<
".");
819 return H > 0 ? H : -H;
851 Real beta{(1.0 + std::sqrt(1.0 - kepl.
e*kepl.
e)) / kepl.
e};
852 return E + 2.0 * std::atan(std::sin(E) / (beta - std::cos(E)));
876 return 2.0*std::atan(std::sqrt((kepl.
e+1.0)/(kepl.
e-1.0)) * std::tanh(H/2.0));
1057 #define CMD "Astro::OrbitalElements::Anomaly::L(...): "
1062 CMD "conversion error, L = " << t_L <<
" ≠ " << this->
L <<
".");
1078 #define CMD "Astro::OrbitalElements::Anomaly::lambda(...): "
1083 CMD "conversion error, lambda = " << t_lambda <<
" ≠ " << this->
lambda <<
".");
1099 #define CMD "Astro::OrbitalElements::Anomaly::H(...): "
1104 CMD "conversion error, H = " << t_H <<
" ≠ " << this->
H <<
".");
1115 std::ostringstream os;
1117 "v : true anomaly = " << this->
nu <<
" (rad) = " <<
rad_to_deg(this->
nu) <<
" (deg)" << std::endl <<
1118 "M : mean anomaly = " << this->
M <<
" (rad) = " <<
rad_to_deg(this->
M) <<
" (deg)" << std::endl <<
1119 "E : eccentric anomaly = " << this->
E <<
" (rad) = " <<
rad_to_deg(this->
E) <<
" (deg)" << std::endl <<
1120 "L : true longitude = " << this->
L <<
" (rad) = " <<
rad_to_deg(this->
L) <<
" (deg)" << std::endl <<
1121 "λ : mean longitude = " << this->
lambda <<
" (rad) = " <<
rad_to_deg(this->
lambda) <<
" (deg)" << std::endl <<
1122 "H : hyperbolic anomaly = " << this->
H <<
" (rad) = " <<
rad_to_deg(this->
H) <<
" (deg)" << std::endl;
1151 #define CMD "Astro::OrbitalElements::Anomaly::sanity_check(...) "
1153 if (!(std::isfinite(this->
nu))) {
1157 if (!(std::isfinite(this->
M))) {
1161 if (!(std::isfinite(this->
E))) {
1165 if (!(std::isfinite(this->
L))) {
1169 if (!(std::isfinite(this->
lambda))) {
1192 #define CMD "Astro::OrbitalElements::cartesian_to_keplerian(...): "
1201 Real r_norm{cart.
r.norm()};
1202 Vector3 e_vec{cart.
v.cross(h)/mu - cart.
r/r_norm};
1205 Vector3 n{Vector3::UnitZ().cross(h)};
1208 CMD "conversion error h = " << h <<
" ≠ 0.");
1211 Real e{e_vec.norm()};
1214 Real e_dot_r{e_vec.transpose()*cart.
r};
1215 Real nu{std::acos(e_dot_r / (e * r_norm))};
1216 if (cart.
r.transpose()*cart.
v < 0.0) {nu = 2.0*
PI - nu;}
1219 Real i{std::acos(h.z() / h.norm())};
1222 Real n_norm{n.norm()};
1223 Real Omega{std::acos(n.x() / n_norm)};
1224 if (n.y() < 0.0) {Omega = 2.0*
PI - Omega;}
1227 Real n_dot_e_vec{n.transpose()*e_vec};
1228 Real omega{std::acos(n_dot_e_vec / (n_norm * e))};
1229 if (e_vec.z() < 0.0) {omega = 2.0*
PI - omega;}
1232 Real a{1.0 / (2.0 / r_norm - cart.
v.squaredNorm() / mu)};
1255 #define CMD "Astro::OrbitalElements::keplerian_to_cartesian(...): "
1261 Real r_c{kepl.
a * (1.0 - kepl.
e*std::cos(anom.
E))};
1265 r_c * std::cos(anom.
nu),
1266 r_c * std::sin(anom.
nu)
1271 std::sqrt(1.0 - kepl.
e*kepl.
e) * std::cos(anom.
E)
1274 v_of *= std::sqrt(mu / kepl.
a);
1277 Real c_Omega{std::cos(kepl.
Omega)}, s_Omega{std::sin(kepl.
Omega)};
1278 Real c_omega{std::cos(kepl.
omega)}, s_omega{std::sin(kepl.
omega)};
1279 Real c_i{std::cos(kepl.
i)}, s_i{std::sin(kepl.
i)};
1281 r_of.x()*(c_Omega*c_omega - s_Omega*s_omega*c_i) - r_of.y()*(c_Omega*s_omega + s_Omega*c_omega*c_i),
1282 r_of.x()*(s_Omega*c_omega + c_Omega*s_omega*c_i) - r_of.y()*(s_Omega*s_omega - c_Omega*c_omega*c_i),
1283 r_of.x()*(s_omega*s_i) + r_of.y()*(c_omega*s_i)
1287 v_of.x()*(c_Omega*c_omega - s_Omega*s_omega*c_i) - v_of.y()*(c_Omega*s_omega + s_Omega*c_omega*c_i),
1288 v_of.x()*(s_Omega*c_omega + c_Omega*s_omega*c_i) - v_of.y()*(s_Omega*s_omega - c_Omega*c_omega*c_i),
1289 v_of.x()*(s_omega*s_i) + v_of.y()*(c_omega*s_i)
1307 #define CMD "Astro::OrbitalElements::equinoctial_to_cartesian(...): "
1313 Real c_L{std::cos(anom.
L)}, s_L{std::sin(anom.
L)};
1314 Real alpha_2{equi.
h*equi.
h - equi.
k*equi.
k};
1315 Real s_2{1.0 + equi.
h*equi.
h + equi.
k*equi.
k};
1316 Real w{1.0 + equi.
f*c_L + equi.
g*s_L};
1317 Real r_c{equi.
p / w};
1322 tmp * (c_L + alpha_2*c_L + 2.0*equi.
h*equi.
k*s_L),
1323 tmp * (s_L - alpha_2*s_L + 2.0*equi.
h*equi.
k*c_L),
1324 2.0*tmp * (equi.
h*s_L - equi.
k*c_L);
1326 std::cout <<
"cart.r = " << cart.
r << std::endl;
1328 tmp = -1.0/s_2 * std::sqrt(mu/equi.
p);
1330 tmp * ( s_L + alpha_2*s_L - 2.0*equi.
h*equi.
k*c_L + equi.
g - 2.0*equi.
f*equi.
h*equi.
k + alpha_2*equi.
g),
1331 tmp * (-c_L + alpha_2*c_L + 2.0*equi.
h*equi.
k*s_L - equi.
f + 2.0*equi.
g*equi.
h*equi.
k - alpha_2*equi.
f),
1332 2.0*tmp * (-equi.
h*c_L - equi.
k*s_L + equi.
f*equi.
h - equi.
g*equi.
k);
1334 std::cout <<
"cart.v = " << cart.
v << std::endl;
1350 #define CMD "Astro::OrbitalElements::keplerian_to_equinoctial(...): "
1360 Real f{kepl.
e * std::cos(omega_plus_Omega)};
1363 Real g{kepl.
e * std::sin(omega_plus_Omega)};
1367 tmp = std::tan(kepl.
i / 2.0);
1368 if (I == Factor::RETROGRADE) {tmp = 1.0/tmp;}
1395 #define CMD "Astro::OrbitalElements::equinoctial_to_cartesian(...): "
1408 Real c_L{std::cos(anom.
L)}, s_L{std::sin(anom.
L)};
1409 Real h2{h*h}, k2{k*k}, hk{h*k};
1410 Real bf{p / ((1.0+f*c_L+g*s_L) * (1.0+h2+k2))};
1411 Real x{bf*c_L}, y{bf*s_L};
1412 Real bf1{std::sqrt(mu/p) / (1.0+h2+k2)};
1413 Real c_Lf{bf1 * (c_L+f)};
1414 Real s_Lg{bf1 * (s_L+g)};
1418 (1.0+h2-k2)*x + 2.0*
static_cast<Real>(I)*hk*y,
1419 static_cast<Real>(I)*(1.0-h2+k2)*y + 2.0*hk*x,
1420 2.0*(h*y-
static_cast<Real>(I)*k*x);
1422 static_cast<Real>(I)*2.0*hk*c_Lf - (1.0+h2-k2)*s_Lg,
1423 static_cast<Real>(I)*(1.0-h2+k2)*c_Lf - 2.0*hk*s_Lg,
1424 2.0*(h*c_Lf +
static_cast<Real>(I)*k*s_Lg);
1439 #define CMD "Astro::OrbitalElements::equinoctial_to_keplerian(...): "
#define ASTRO_ASSERT(COND, MSG)
Definition Astro.hh:42
#define ASTRO_WARNING(MSG)
Definition Astro.hh:51
#define ASTRO_ERROR(MSG)
Definition Astro.hh:31
#define ASTRO_ASSERT_WARNING(COND, MSG)
Definition Astro.hh:59
The namespace for the orbital elements definition and conversion.
Definition OrbitalElements.hxx:34
Real H_to_M(Real H, Keplerian const &kepl)
Definition OrbitalElements.hxx:886
void equinoctial_to_cartesian(Equinoctial const &equi, Anomaly const &anom, Real mu, Cartesian &cart)
Definition OrbitalElements.hxx:1305
Real lambda_to_L(Real lambda, Real nu, Real M)
Definition OrbitalElements.hxx:932
Real lambda_to_M(Real lambda, Keplerian const &kepl, Factor I)
Definition OrbitalElements.hxx:919
Real M_to_H(Real M, Keplerian const &kepl)
Definition OrbitalElements.hxx:800
Real M_to_E(Real M, Keplerian const &kepl)
Definition OrbitalElements.hxx:764
Real nu_to_L(Real nu, Keplerian const &kepl, Factor I)
Definition OrbitalElements.hxx:751
Real E_to_nu(Real E, Keplerian const &kepl)
Definition OrbitalElements.hxx:849
void keplerian_to_equinoctial(Keplerian const &kepl, Factor I, Equinoctial &equi)
Definition OrbitalElements.hxx:1348
Real nu_to_M(Real nu, Keplerian const &kepl)
Definition OrbitalElements.hxx:717
Real L_to_nu(Real L, Keplerian const &kepl, Factor I)
Definition OrbitalElements.hxx:896
Real H_to_nu(Real H, Keplerian const &kepl)
Definition OrbitalElements.hxx:874
void equinoctial_to_keplerian(Equinoctial const &equi, Keplerian &kepl)
Definition OrbitalElements.hxx:1437
void cartesian_to_keplerian(Cartesian const &cart, Real mu, Keplerian &kepl)
Definition OrbitalElements.hxx:1190
Real E_to_M(Real E, Keplerian const &kepl)
Definition OrbitalElements.hxx:862
Real nu_to_E(Real nu, Keplerian const &kepl)
Definition OrbitalElements.hxx:737
Real L_to_lambda(Real L, Real nu, Real M)
Definition OrbitalElements.hxx:909
Real M_to_lambda(Real M, Keplerian const &kepl, Factor I)
Definition OrbitalElements.hxx:832
void keplerian_to_cartesian(Keplerian const &kepl, Anomaly const &anom, Real mu, Cartesian &cart)
Definition OrbitalElements.hxx:1253
The namespace for the Astro library.
Definition Astro.hh:72
static Real const PI
Definition Utilities.hxx:57
Eigen::Quaternion< Real > Quaternion
Definition Astro.hh:111
static Real const EPSILON_HIGH
Definition Astro.hh:129
Real angle_in_range(Real x)
Definition Utilities.hxx:85
int Integer
Definition Astro.hh:84
static Vector3 const NAN_VEC3
Definition Astro.hh:151
Eigen::Matrix< Real, 3, 3 > Rotation
Definition Astro.hh:110
static Real const EPSILON_LOW
Definition Astro.hh:131
static Real const QUIET_NAN
Definition Astro.hh:133
enum class Type :Integer { UNDEFINED=0, HYPERBOLIC=1, ELLIPTIC=2, PARABOLIC=3 } Type
Definition OrbitalElements.hxx:24
static Vector4 const NAN_VEC4
Definition Astro.hh:159
double Real
Definition Astro.hh:83
Eigen::Vector< Real, 2 > Vector2
Definition Astro.hh:90
enum class Factor :Integer { POSIGRADE=1, UNDEFINED=0, RETROGRADE=-1 } Factor
Definition OrbitalElements.hxx:19
Eigen::Vector< Real, 3 > Vector3
Definition Astro.hh:92
Real rad_to_deg(Real x)
Definition Utilities.hxx:77
static Real const EPSILON_MEDIUM
Definition Astro.hh:130
Structure container for the orbital anomalies.
Definition OrbitalElements.hxx:955
void info(std::ostream &os)
Definition OrbitalElements.hxx:1130
void set_M(Real t_M, Keplerian const &kepl, Factor I)
Definition OrbitalElements.hxx:1012
void set_H(Real t_H, Keplerian const &kepl, Factor I)
Set the hyperbolic anomaly .
Definition OrbitalElements.hxx:1097
std::string info() const
Definition OrbitalElements.hxx:1114
Real H
Definition OrbitalElements.hxx:959
Real nu
Definition OrbitalElements.hxx:956
Anomaly()
Definition OrbitalElements.hxx:966
void set_lambda(Real t_lambda, Keplerian const &kepl, Factor I)
Set the mean longitude .
Definition OrbitalElements.hxx:1076
bool sanity_check() const
Definition OrbitalElements.hxx:1149
Real lambda
Definition OrbitalElements.hxx:961
void set_nu(Real nu, Keplerian const &kepl, Factor I)
Definition OrbitalElements.hxx:994
void reset()
Definition OrbitalElements.hxx:1135
Anomaly & operator=(Anomaly &&)=default
Anomaly & operator=(const Anomaly &)=default
Anomaly(Anomaly const &)=default
void set_E(Real t_E, Keplerian const &kepl, Factor I)
Set the eccentric anomaly .
Definition OrbitalElements.hxx:1035
void set_L(Real t_L, Keplerian const &kepl, Factor I)
Set the true longitude .
Definition OrbitalElements.hxx:1055
Real E
Definition OrbitalElements.hxx:958
Real L
Definition OrbitalElements.hxx:960
Real M
Definition OrbitalElements.hxx:957
Anomaly(Anomaly &&)=default
Structure container for the cartesian orbital elements.
Definition OrbitalElements.hxx:56
void info(std::ostream &os)
Definition OrbitalElements.hxx:120
Cartesian(Cartesian const &)=default
Vector3 v
Definition OrbitalElements.hxx:58
void reset()
Definition OrbitalElements.hxx:125
Cartesian(Cartesian &&)=default
Cartesian()
Definition OrbitalElements.hxx:63
Cartesian & operator=(Cartesian &&)=default
Cartesian(Vector3 const &t_r, Vector3 const &t_v)
Definition OrbitalElements.hxx:70
bool sanity_check() const
Definition OrbitalElements.hxx:133
Cartesian(Real r_x, Real r_y, Real r_z, Real v_x, Real v_y, Real v_z)
Definition OrbitalElements.hxx:81
Vector3 h() const
Definition OrbitalElements.hxx:153
Vector3 r
Definition OrbitalElements.hxx:57
std::string info() const
Definition OrbitalElements.hxx:108
Cartesian & operator=(const Cartesian &)=default
Struct container for the (modified) equinoctial orbital elements.
Definition OrbitalElements.hxx:382
Real Omega() const
Definition OrbitalElements.hxx:575
Real h
Definition OrbitalElements.hxx:386
Real g
Definition OrbitalElements.hxx:385
bool is_singular(Real tol_i=EPSILON_LOW) const
Definition OrbitalElements.hxx:501
Real a() const
Definition OrbitalElements.hxx:541
Equinoctial & operator=(Equinoctial &&)=default
Real omega() const
Definition OrbitalElements.hxx:563
Equinoctial(Real t_p, Real t_f, Real t_g, Real t_h, Real t_k)
Definition OrbitalElements.hxx:403
Real p
Definition OrbitalElements.hxx:383
Real u(Real L) const
Definition OrbitalElements.hxx:531
Real e() const
Definition OrbitalElements.hxx:547
Real f
Definition OrbitalElements.hxx:384
std::string info() const
Definition OrbitalElements.hxx:430
bool sanity_check() const
Definition OrbitalElements.hxx:462
void reset()
Definition OrbitalElements.hxx:450
Real i() const
Definition OrbitalElements.hxx:553
void info(std::ostream &os)
Definition OrbitalElements.hxx:445
Equinoctial(Equinoctial const &)=default
Equinoctial(Equinoctial &&)=default
Equinoctial & operator=(const Equinoctial &)=default
Real k
Definition OrbitalElements.hxx:387
Equinoctial()
Definition OrbitalElements.hxx:393
bool is_nonsingular(Real tol_i=EPSILON_LOW) const
Definition OrbitalElements.hxx:520
Structure container for the (modified) Keplerian orbital elements.
Definition OrbitalElements.hxx:193
Keplerian(Keplerian const &)=default
Real i
Definition OrbitalElements.hxx:196
std::string info() const
Definition OrbitalElements.hxx:241
Keplerian(Keplerian &&)=default
Real p() const
Definition OrbitalElements.hxx:353
bool is_nonsingular(Real tol_i=EPSILON_LOW, Real tol_e=EPSILON_LOW) const
Definition OrbitalElements.hxx:338
void reset()
Definition OrbitalElements.hxx:261
Real omega
Definition OrbitalElements.hxx:198
Keplerian & operator=(Keplerian &&)=default
Keplerian & operator=(const Keplerian &)=default
Real e
Definition OrbitalElements.hxx:195
Real Omega
Definition OrbitalElements.hxx:197
void info(std::ostream &os)
Definition OrbitalElements.hxx:256
Keplerian(Real t_a, Real t_e, Real t_i, Real t_Omega, Real t_omega)
Definition OrbitalElements.hxx:213
Real a
Definition OrbitalElements.hxx:194
bool sanity_check() const
Definition OrbitalElements.hxx:276
Real u() const
Definition OrbitalElements.hxx:347
Keplerian()
Definition OrbitalElements.hxx:203
bool is_singular(Real tol_i=EPSILON_LOW, Real tol_e=EPSILON_LOW) const
Definition OrbitalElements.hxx:313
Quaternionic()
Definition OrbitalElements.hxx:606
Quaternionic(Real t_q_1, Real t_q_2, Real t_q_3, Real t_q_4)
Definition OrbitalElements.hxx:621
Quaternionic(Quaternion const &t_q)
Definition OrbitalElements.hxx:612
void reset()
Definition OrbitalElements.hxx:683
Quaternionic(Quaternionic &&)=default
Quaternion q
Definition OrbitalElements.hxx:601
Quaternionic & operator=(const Quaternionic &)=default
std::string info() const
Definition OrbitalElements.hxx:664
bool sanity_check() const
Definition OrbitalElements.hxx:689
Quaternionic & operator=(Quaternionic &&)=default
void info(std::ostream &os)
Definition OrbitalElements.hxx:678
Rotation rotation() const
Definition OrbitalElements.hxx:646
Quaternionic(Quaternionic const &)=default