mirror of
https://github.com/c-cube/moonpool.git
synced 2025-12-12 05:58:42 -05:00
29 lines
763 B
Standard ML
29 lines
763 B
Standard ML
type vec3 = {
|
|
x: float;
|
|
y: float;
|
|
z: float;
|
|
}
|
|
|
|
let of_floats (e1, e2, e3) = { x = e1; y = e2; z = e3 }
|
|
let add v w = { x = v.x +. w.x; y = v.y +. w.y; z = v.z +. w.z }
|
|
let sub v w = { x = v.x -. w.x; y = v.y -. w.y; z = v.z -. w.z }
|
|
let neg v = sub { x = 0.0; y = 0.0; z = 0.0 } v
|
|
let dot v w = (v.x *. w.x) +. (v.y *. w.y) +. (v.z *. w.z)
|
|
|
|
let cross v w =
|
|
{
|
|
x = (v.y *. w.z) -. (v.z *. w.y);
|
|
y = (v.z *. w.x) -. (v.x *. w.z);
|
|
z = (v.x *. w.y) -. (v.y *. w.x);
|
|
}
|
|
|
|
let length v = sqrt (dot v v)
|
|
|
|
let unit_vector v =
|
|
let l = length v in
|
|
{ x = v.x /. l; y = v.y /. l; z = v.z /. l }
|
|
|
|
let mul t v = { x = t *. v.x; y = t *. v.y; z = t *. v.z }
|
|
|
|
(* pairwise multiplication *)
|
|
let pmul v w = { x = v.x *. w.x; y = v.y *. w.y; z = v.z *. w.z }
|