|
|
|
|
@ -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; |
|
|
|
|
|