mirror of
https://github.com/c-cube/moonpool.git
synced 2025-12-06 03:05:30 -05:00
47 lines
783 B
Standard ML
47 lines
783 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; }
|