1313//! dimensions $`D < 6`$.[^1] See the [examples](#examples) below where the symbolic expressions are
1414//! generated in text form. The next releases will implement code forms (e.g., Rust code in various
1515//! profiles based on SIMD using [`lav`] with and without generics or arbitrary precision types
16- //! using [`rug`]). Currently, the Pistachio flavor -- Projective Geometric Algebra (PGA) -- is
17- //! implemented for $`D \equiv N + 1 \le 8`$ in all three metrics, i.e., elliptic, hyperbolic, and
18- //! parabolic (Euclidean).[^2] The 5D, 6D, and 7D PGAs (i.e., $`N = 5`$, $`N = 6`$, and $`N = 7`$)
19- //! are incomplete as there are no inverses based on Study numbers but they provide
20- //! dimension-agnostic insights regarding duality and the choice of basis blades.
16+ //! using [`rug`]). Currently, the planed-based pistachio flavor -- Projective Geometric Algebra
17+ //! (PGA) -- is implemented for $`D \equiv N + 1 \le 8`$ in all three metrics, i.e., elliptic,
18+ //! hyperbolic, and parabolic (Euclidean).[^2] The 5D, 6D, and 7D PGAs (i.e., $`N = 5`$, $`N = 6`$,
19+ //! and $`N = 7`$) are incomplete as there are no inverses based on Study numbers but they provide
20+ //! dimension-agnostic insights regarding duality and the choice of basis blades. The PGA is
21+ //! especially of interest for computer graphics, game engines, and physics simulations as it the
22+ //! most compact flavor (i.e., a one-up flavor) unifying the established but scattered frameworks,
23+ //! e.g., homogeneous coordinates, Plücker coordinates, (dual) quaternions, and screw theory. Even
24+ //! without any knowledge of geometric algebra, an API can be more intuitive as it unifies the
25+ //! positional and directional aspects of geometric entities (e.g., planes, lines, points) and the
26+ //! linear and angular aspects of rigid-body dynamics in a dimension-agnostic way with closed-form
27+ //! (i.e., non-iterative) solutions up to 4D (e.g., [`PgaP2`], [`PgaP3`], [`PgaP4`]).[^3]
2128//!
2229//! [^1]: S. De Keninck and M. Roelfs, “Normalization, square roots, and the exponential and
2330//! logarithmic maps in geometric algebras of less than 6D”, [Mathematical Methods in the Applied
2431//! Sciences 47, 1425–1441](https://doi.org/10.1002/mma.8639).
2532//! [^2]: M. Roelfs and S. De Keninck, “Graded Symmetry Groups: Plane and Simple”, [Advances in
2633//! Applied Clifford Algebras 33](https://doi.org/10.1007/s00006-023-01269-9).
34+ //! [^3]: L. Dorst and S. De Keninck, “Physical Geometry by Plane-Based Geometric Algebra”,
35+ //! [Advanced Computational Applications of Geometric Algebra,
36+ //! 43–76](https://doi.org/10.1007/978-3-031-55985-3_2).
2737//!
2838//! [`lav`]: https://docs.rs/lav
2939//! [`rug`]: https://docs.rs/rug
136146//! # Examples
137147//!
138148//! Generates the expression for rotating a plane in [`PgaP3`], i.e., Parabolic (Euclidean) 3D PGA.
139- //! The [`Multivector::pin()`] method prefixes symbols of [`Multivector::plane()`] with `"~"` to
140- //! distinguish them from the symbols of [`Multivector::rotator()`].
149+ //! The [`Multivector::pin()`] method pins symbols of [`Multivector::plane()`] with the *combining x
150+ //! below* (i.e., the Unicode *combining diacritical mark* `"◌͓"`) to distinguish them from the
151+ //! symbols of [`Multivector::rotator()`].
141152//!
142153//! ```
143154//! use vee::{format_eq, PgaP3 as Vee};
@@ -326,7 +337,7 @@ impl<B: Algebra> Multivector<B> {
326337 {
327338 iter. into_iter ( ) . map ( |( s, b) | ( [ [ s] ] , b) ) . collect ( )
328339 }
329- /// Adds combining X below (i.e., `" ͓"`) to all symbols.
340+ /// Adds Unicode * combining x below* (i.e., `"◌ ͓"`) to all symbols.
330341 ///
331342 /// Pins this multivector as being sandwiched by the reflection or projection operator.
332343 ///
@@ -336,7 +347,7 @@ impl<B: Algebra> Multivector<B> {
336347 pub fn pin ( self ) -> Self {
337348 self . sym ( "\u{0353} " )
338349 }
339- /// Adds combining left arrowhead below (i.e., `" ͔"`) to all symbols.
350+ /// Adds Unicode * combining left arrowhead below* (i.e., `"◌ ͔"`) to all symbols.
340351 ///
341352 /// Pins this multivector as left-hand side.
342353 ///
@@ -346,7 +357,7 @@ impl<B: Algebra> Multivector<B> {
346357 pub fn lhs ( self ) -> Self {
347358 self . sym ( "\u{0354} " )
348359 }
349- /// Adds combining left arrowhead below (i.e., `" ͕"`) to all symbols.
360+ /// Adds Unicode * combining left arrowhead below* (i.e., `"◌ ͕"`) to all symbols.
350361 ///
351362 /// Pins this multivector as right-hand side.
352363 ///
@@ -356,13 +367,15 @@ impl<B: Algebra> Multivector<B> {
356367 pub fn rhs ( self ) -> Self {
357368 self . sym ( "\u{0355} " )
358369 }
359- /// Appends combining diacritical `mark` to all symbols.
370+ /// Appends Unicode *combining diacritical mark* to all symbols.
371+ ///
372+ /// This example appends *combining double breve below* (i.e., `"◌͜◌"`) to plane $`p`$.
360373 ///
361374 /// ```
362375 /// use vee::{format_eq, PgaP3 as Vee};
363376 ///
364377 /// format_eq!(Vee::plane(), "We0+xe1+ye2+ze3");
365- /// format_eq!(Vee::plane().sym("\u{0338 }"), "W̸e0+x̸e1+y̸e2+z̸e3 ");
378+ /// format_eq!(Vee::plane().sym("\u{035c }"), "W͜e0+x͜e1+y͜e2+z͜e3 ");
366379 /// ```
367380 #[ must_use]
368381 pub fn sym ( mut self , mark : & str ) -> Self {
0 commit comments