Browse Source

fix: Use atan2 for argument_of_periapsis to resolve quadrature ambiguity

main
cinnaboot 5 months ago
parent
commit
c6121e0712
  1. 11
      src/orbital_mechanics.cpp

11
src/orbital_mechanics.cpp

@ -210,13 +210,14 @@ OrbitalElements cartesian_to_orbital_elements(Vec3 position, Vec3 velocity, doub
Omega = 0.0;
}
double e_dot_n = vec3_dot(e_vec, n) / (mu * n_mag);
double omega;
if (e > 1e-10 && n_mag > 1e-10) {
omega = acos(e_dot_n / e);
if (e_vec.z < 0.0) {
omega = 2.0 * M_PI - omega;
double cos_omega = vec3_dot(e_vec, n) / (e * n_mag);
Vec3 n_cross_e = vec3_cross(n, e_vec);
double sin_omega = vec3_dot(n_cross_e, h_vec) / (e * n_mag * h);
omega = atan2(sin_omega, cos_omega);
if (omega < 0.0) {
omega += 2.0 * M_PI;
}
} else {
omega = 0.0;

Loading…
Cancel
Save