#![no_std]
#![deny(missing_docs)]
mod dot;
mod inner;
mod outer;
mod vector;
pub use dot::DotProduct;
pub use inner::InnerSpace;
pub use outer::OuterProduct;
pub use vector::{VectorSpace, VectorSpaceAssign};
use core::ops::{Add, Sub};
pub fn interpolate<T>(a: T, b: T, ratio: <<T as Sub>::Output as VectorSpace>::Scalar) -> T
where
T: Clone + Sub + Add<<T as Sub>::Output, Output = T>,
<T as Sub>::Output: VectorSpace,
{
a.clone() + (b - a) * ratio
}
pub fn distance<T: Sub>(a: T, b: T) -> <T::Output as VectorSpace>::Scalar
where
T::Output: InnerSpace,
{
(b - a).magnitude()
}
pub fn distance2<T: Sub>(a: T, b: T) -> <T::Output as VectorSpace>::Scalar
where
T::Output: InnerSpace,
{
(b - a).magnitude2()
}