1#![deny(missing_docs)]
2mod dot;
11mod inner;
12mod outer;
13mod vector;
14
15pub use dot::DotProduct;
16pub use inner::InnerSpace;
17pub use outer::OuterProduct;
18pub use vector::VectorSpace;
19
20use std::ops::{Add, Sub};
21
22pub fn interpolate<T: Copy>(a: T, b: T, ratio: <<T as Sub>::Output as VectorSpace>::Scalar) -> T
24where
25 T: Sub + Add<<T as Sub>::Output, Output = T>,
26 <T as Sub>::Output: VectorSpace,
27{
28 a + (b - a) * ratio
29}
30
31pub fn distance<T: Sub>(a: T, b: T) -> <T::Output as VectorSpace>::Scalar
33where
34 T::Output: InnerSpace,
35{
36 (b - a).magnitude()
37}
38
39pub fn distance2<T: Sub>(a: T, b: T) -> <T::Output as VectorSpace>::Scalar
41where
42 T::Output: InnerSpace,
43{
44 (b - a).magnitude2()
45}