src/manifold.rs

Fri, 06 Dec 2024 14:27:14 -0500

author
Tuomo Valkonen <tuomov@iki.fi>
date
Fri, 06 Dec 2024 14:27:14 -0500
changeset 45
cac6978dc7dd
parent 37
d7cd14b8ccc0
child 56
34f8ec636368
permissions
-rw-r--r--

Adjust plot style

13
f67949050a32 documentation
Tuomo Valkonen <tuomov@iki.fi>
parents: 8
diff changeset
1 /*!
f67949050a32 documentation
Tuomo Valkonen <tuomov@iki.fi>
parents: 8
diff changeset
2 Abstract traits for manifolds.
f67949050a32 documentation
Tuomo Valkonen <tuomov@iki.fi>
parents: 8
diff changeset
3 */
5
f248e1434c3b Some distance functions etc.
Tuomo Valkonen <tuomov@iki.fi>
parents: 3
diff changeset
4
37
d7cd14b8ccc0 Basic cylinder implementation
Tuomo Valkonen <tuomov@iki.fi>
parents: 13
diff changeset
5 use serde::Serialize;
5
f248e1434c3b Some distance functions etc.
Tuomo Valkonen <tuomov@iki.fi>
parents: 3
diff changeset
6 use alg_tools::euclidean::Euclidean;
0
989e2fe08db2 Basic cube logarithm
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
7
989e2fe08db2 Basic cube logarithm
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
8 /// A point on a manifold
989e2fe08db2 Basic cube logarithm
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
9 pub trait ManifoldPoint : Clone + PartialEq {
989e2fe08db2 Basic cube logarithm
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
10 // Type of tangent factors
37
d7cd14b8ccc0 Basic cylinder implementation
Tuomo Valkonen <tuomov@iki.fi>
parents: 13
diff changeset
11 type Tangent : Euclidean<f64, Output=Self::Tangent> + std::fmt::Debug + Serialize;
0
989e2fe08db2 Basic cube logarithm
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
12
989e2fe08db2 Basic cube logarithm
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
13 /// Exponential map
8
17d71ca4ce84 Make exp consuming
Tuomo Valkonen <tuomov@iki.fi>
parents: 7
diff changeset
14 fn exp(self, tangent : &Self::Tangent) -> Self;
0
989e2fe08db2 Basic cube logarithm
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
15
989e2fe08db2 Basic cube logarithm
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
16 /// Logarithmic map
989e2fe08db2 Basic cube logarithm
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
17 fn log(&self, other : &Self) -> Self::Tangent;
5
f248e1434c3b Some distance functions etc.
Tuomo Valkonen <tuomov@iki.fi>
parents: 3
diff changeset
18
f248e1434c3b Some distance functions etc.
Tuomo Valkonen <tuomov@iki.fi>
parents: 3
diff changeset
19 /// Distance to `other`
f248e1434c3b Some distance functions etc.
Tuomo Valkonen <tuomov@iki.fi>
parents: 3
diff changeset
20 fn dist_to(&self, other : &Self) -> f64;
6
df9628092285 Add a zero function on manifolds
Tuomo Valkonen <tuomov@iki.fi>
parents: 5
diff changeset
21
df9628092285 Add a zero function on manifolds
Tuomo Valkonen <tuomov@iki.fi>
parents: 5
diff changeset
22 /// Return the zero tangent at `self`.
df9628092285 Add a zero function on manifolds
Tuomo Valkonen <tuomov@iki.fi>
parents: 5
diff changeset
23 fn tangent_origin(&self) -> Self::Tangent;
0
989e2fe08db2 Basic cube logarithm
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
24 }
5
f248e1434c3b Some distance functions etc.
Tuomo Valkonen <tuomov@iki.fi>
parents: 3
diff changeset
25
7
8979a6638424 A simple test
Tuomo Valkonen <tuomov@iki.fi>
parents: 6
diff changeset
26 /// Point on a manifold that possesses displayable embedded coordinates.
8979a6638424 A simple test
Tuomo Valkonen <tuomov@iki.fi>
parents: 6
diff changeset
27 pub trait EmbeddedManifoldPoint : ManifoldPoint + std::fmt::Debug {
37
d7cd14b8ccc0 Basic cylinder implementation
Tuomo Valkonen <tuomov@iki.fi>
parents: 13
diff changeset
28 type EmbeddedCoords : std::fmt::Display + Serialize;
7
8979a6638424 A simple test
Tuomo Valkonen <tuomov@iki.fi>
parents: 6
diff changeset
29
8979a6638424 A simple test
Tuomo Valkonen <tuomov@iki.fi>
parents: 6
diff changeset
30 /// Convert a point on a manifold into embedded coordinates
8979a6638424 A simple test
Tuomo Valkonen <tuomov@iki.fi>
parents: 6
diff changeset
31 fn embedded_coords(&self) -> Self::EmbeddedCoords;
8979a6638424 A simple test
Tuomo Valkonen <tuomov@iki.fi>
parents: 6
diff changeset
32 }
37
d7cd14b8ccc0 Basic cylinder implementation
Tuomo Valkonen <tuomov@iki.fi>
parents: 13
diff changeset
33
d7cd14b8ccc0 Basic cylinder implementation
Tuomo Valkonen <tuomov@iki.fi>
parents: 13
diff changeset
34 /// Point on a manifold that possesses faces
d7cd14b8ccc0 Basic cylinder implementation
Tuomo Valkonen <tuomov@iki.fi>
parents: 13
diff changeset
35 pub trait FacedManifoldPoint : ManifoldPoint + std::fmt::Debug {
d7cd14b8ccc0 Basic cylinder implementation
Tuomo Valkonen <tuomov@iki.fi>
parents: 13
diff changeset
36 type Face : std::fmt::Display + Serialize;
d7cd14b8ccc0 Basic cylinder implementation
Tuomo Valkonen <tuomov@iki.fi>
parents: 13
diff changeset
37
d7cd14b8ccc0 Basic cylinder implementation
Tuomo Valkonen <tuomov@iki.fi>
parents: 13
diff changeset
38 /// Convert a point on a manifold into embedded coordinates
d7cd14b8ccc0 Basic cylinder implementation
Tuomo Valkonen <tuomov@iki.fi>
parents: 13
diff changeset
39 fn face(&self) -> Self::Face;
d7cd14b8ccc0 Basic cylinder implementation
Tuomo Valkonen <tuomov@iki.fi>
parents: 13
diff changeset
40 }

mercurial