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