src/manifold.rs

changeset 37
d7cd14b8ccc0
parent 13
f67949050a32
child 56
34f8ec636368
equal deleted inserted replaced
34:aa6129697116 37:d7cd14b8ccc0
1 /*! 1 /*!
2 Abstract traits for manifolds. 2 Abstract traits for manifolds.
3 */ 3 */
4 4
5 use serde::Serialize;
5 use alg_tools::euclidean::Euclidean; 6 use alg_tools::euclidean::Euclidean;
6 7
7 /// A point on a manifold 8 /// A point on a manifold
8 pub trait ManifoldPoint : Clone + PartialEq { 9 pub trait ManifoldPoint : Clone + PartialEq {
9 // Type of tangent factors 10 // Type of tangent factors
10 type Tangent : Euclidean<f64, Output=Self::Tangent> + std::fmt::Debug; 11 type Tangent : Euclidean<f64, Output=Self::Tangent> + std::fmt::Debug + Serialize;
11 12
12 /// Exponential map 13 /// Exponential map
13 fn exp(self, tangent : &Self::Tangent) -> Self; 14 fn exp(self, tangent : &Self::Tangent) -> Self;
14 15
15 /// Logarithmic map 16 /// Logarithmic map
22 fn tangent_origin(&self) -> Self::Tangent; 23 fn tangent_origin(&self) -> Self::Tangent;
23 } 24 }
24 25
25 /// Point on a manifold that possesses displayable embedded coordinates. 26 /// Point on a manifold that possesses displayable embedded coordinates.
26 pub trait EmbeddedManifoldPoint : ManifoldPoint + std::fmt::Debug { 27 pub trait EmbeddedManifoldPoint : ManifoldPoint + std::fmt::Debug {
27 type EmbeddedCoords : std::fmt::Display; 28 type EmbeddedCoords : std::fmt::Display + Serialize;
28 29
29 /// Convert a point on a manifold into embedded coordinates 30 /// Convert a point on a manifold into embedded coordinates
30 fn embedded_coords(&self) -> Self::EmbeddedCoords; 31 fn embedded_coords(&self) -> Self::EmbeddedCoords;
31 } 32 }
33
34 /// Point on a manifold that possesses faces
35 pub trait FacedManifoldPoint : ManifoldPoint + std::fmt::Debug {
36 type Face : std::fmt::Display + Serialize;
37
38 /// Convert a point on a manifold into embedded coordinates
39 fn face(&self) -> Self::Face;
40 }

mercurial