diff --git a/src/orbital_mechanics.cpp b/src/orbital_mechanics.cpp index 8e5f7e3..084c39b 100644 --- a/src/orbital_mechanics.cpp +++ b/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;