Two-body Keplerian orbit propagation
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

kepler: extract degenerate_elements helper (merlint E005)

+5 -12
+5 -12
lib/analytic.ml
··· 55 55 let nu = clamp_acos cos_nu in 56 56 if rdotv < 0. then (2. *. Float.pi) -. nu else nu 57 57 58 + let degenerate_elements (pos : Vec3.t) (vel : Vec3.t) r_mag = 59 + { a = r_mag; e = 2.; i = 0.; raan = 0.; argp = 0.; nu = 0.; n = 0.; 60 + pos; vel } 61 + 58 62 (** Convert state vector to classical orbital elements. Vallado Algorithm 9. *) 59 63 let elements_of_state (pos : Vec3.t) (vel : Vec3.t) = 60 64 let open Vec3 in 61 65 let r_mag = length pos in 62 66 let v_mag = length vel in 63 - (* Guard degenerate inputs *) 64 67 if r_mag < 1e-10 || v_mag < 1e-10 then 65 - { 66 - a = r_mag; 67 - e = 2.; 68 - i = 0.; 69 - raan = 0.; 70 - argp = 0.; 71 - nu = 0.; 72 - n = 0.; 73 - pos; 74 - vel; 75 - } 68 + degenerate_elements pos vel r_mag 76 69 else 77 70 (* Angular momentum vector h = r × v *) 78 71 let h = cross pos vel in