Collision probability computation for conjunction assessment
0
fork

Configure Feed

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

Unify Odm.vec3 with Vec3.t

Odm.vec3 is now Vec3.t (type alias via = Vec3.t = {x; y; z}).
Removes to_v conversion helpers from collision and cam interop tests.
odm now depends on vec3.

+8 -10
+8 -10
test/interop/gmat/test.ml
··· 13 13 | Ok oem -> oem 14 14 | Error e -> Alcotest.failf "parse error: %a" Odm.pp_error e 15 15 16 - let to_v (v : Odm.vec3) : Vec3.t = { x = v.x; y = v.y; z = v.z } 17 - 18 16 let v_sub (a : Vec3.t) (b : Vec3.t) : Vec3.t = 19 17 { x = a.x -. b.x; y = a.y -. b.y; z = a.z -. b.z } 20 18 ··· 42 40 let min_dist = ref Float.infinity in 43 41 let min_epoch = ref "" in 44 42 for i = 0 to n - 1 do 45 - let d = v_norm (v_sub (to_v sv1.(i).Odm.pos) (to_v sv2.(i).Odm.pos)) in 43 + let d = v_norm (v_sub (sv1.(i).Odm.pos) (sv2.(i).Odm.pos)) in 46 44 if d < !min_dist then ( 47 45 min_dist := d; 48 46 min_epoch := sv1.(i).epoch) ··· 62 60 let min_i = ref 0 in 63 61 let min_dist = ref Float.infinity in 64 62 for i = 0 to n - 1 do 65 - let d = v_norm (v_sub (to_v sv1.(i).Odm.pos) (to_v sv2.(i).Odm.pos)) in 63 + let d = v_norm (v_sub (sv1.(i).Odm.pos) (sv2.(i).Odm.pos)) in 66 64 if d < !min_dist then ( 67 65 min_dist := d; 68 66 min_i := i) 69 67 done; 70 68 let dv = 71 - v_norm (v_sub (to_v sv1.(!min_i).Odm.vel) (to_v sv2.(!min_i).Odm.vel)) 69 + v_norm (v_sub (sv1.(!min_i).Odm.vel) (sv2.(!min_i).Odm.vel)) 72 70 in 73 71 (* Crossing orbits at ~90 deg: relative velocity ~sqrt(2) * 7.5 ~= 10.6 km/s *) 74 72 Alcotest.(check bool) "high relative velocity" true (dv > 5.0); ··· 90 88 | Error _ -> Alcotest.failf "bad epoch: %s" e 91 89 in 92 90 let times = Array.init n (fun i -> epoch_to_unix sv1.(i).Odm.epoch) in 93 - let pos1 = Array.map (fun sv -> to_v sv.Odm.pos) sv1 in 94 - let pos2 = Array.init n (fun i -> to_v sv2.(i).Odm.pos) in 95 - let vel1 = Array.map (fun sv -> to_v sv.Odm.vel) sv1 in 96 - let vel2 = Array.init n (fun i -> to_v sv2.(i).Odm.vel) in 91 + let pos1 = Array.map (fun sv -> sv.Odm.pos) sv1 in 92 + let pos2 = Array.init n (fun i -> sv2.(i).Odm.pos) in 93 + let vel1 = Array.map (fun sv -> sv.Odm.vel) sv1 in 94 + let vel2 = Array.init n (fun i -> sv2.(i).Odm.vel) in 97 95 (* Step-based minimum for comparison *) 98 96 let step_min_d = ref Float.infinity in 99 97 let step_min_t = ref 0.0 in ··· 140 138 let n = min (Array.length sv1) (Array.length sv2) in 141 139 let min_dist = ref Float.infinity in 142 140 for i = 0 to n - 1 do 143 - let d = v_norm (v_sub (to_v sv1.(i).Odm.pos) (to_v sv2.(i).Odm.pos)) in 141 + let d = v_norm (v_sub (sv1.(i).Odm.pos) (sv2.(i).Odm.pos)) in 144 142 if d < !min_dist then min_dist := d 145 143 done; 146 144 Printf.printf " Miss distance: %.3f km\n" !min_dist;