1 /*! |
1 /*! |
2 Euclidean spaces. |
2 Euclidean spaces. |
3 */ |
3 */ |
4 |
4 |
|
5 use std::ops::{Mul, MulAssign, Div, DivAssign, Add, Sub, AddAssign, SubAssign, Neg}; |
5 use crate::types::*; |
6 use crate::types::*; |
6 use std::ops::{Mul, MulAssign, Div, DivAssign, Add, Sub, AddAssign, SubAssign, Neg}; |
7 use crate::mapping::Space; |
7 |
8 |
8 /// Space (type) with a defined dot product. |
9 /// Space (type) with a defined dot product. |
9 /// |
10 /// |
10 /// `U` is the space of the multiplier, and `F` the space of scalars. |
11 /// `U` is the space of the multiplier, and `F` the space of scalars. |
11 /// Since `U` ≠ `Self`, this trait can also implement dual products. |
12 /// Since `U` ≠ `Self`, this trait can also implement dual products. |
16 /// Space (type) with Euclidean and vector space structure |
17 /// Space (type) with Euclidean and vector space structure |
17 /// |
18 /// |
18 /// The type should implement vector space operations (addition, subtraction, scalar |
19 /// The type should implement vector space operations (addition, subtraction, scalar |
19 /// multiplication and scalar division) along with their assignment versions, as well |
20 /// multiplication and scalar division) along with their assignment versions, as well |
20 /// as the [`Dot`] product with respect to `Self`. |
21 /// as the [`Dot`] product with respect to `Self`. |
21 pub trait Euclidean<F : Float> : Sized + Dot<Self,F> |
22 pub trait Euclidean<F : Float> : Space + Dot<Self,F> |
22 + Mul<F, Output=<Self as Euclidean<F>>::Output> + MulAssign<F> |
23 + Mul<F, Output=<Self as Euclidean<F>>::Output> + MulAssign<F> |
23 + Div<F, Output=<Self as Euclidean<F>>::Output> + DivAssign<F> |
24 + Div<F, Output=<Self as Euclidean<F>>::Output> + DivAssign<F> |
24 + Add<Self, Output=<Self as Euclidean<F>>::Output> |
25 + Add<Self, Output=<Self as Euclidean<F>>::Output> |
25 + Sub<Self, Output=<Self as Euclidean<F>>::Output> |
26 + Sub<Self, Output=<Self as Euclidean<F>>::Output> |
26 + for<'b> Add<&'b Self, Output=<Self as Euclidean<F>>::Output> |
27 + for<'b> Add<&'b Self, Output=<Self as Euclidean<F>>::Output> |