Skip to content

Commit 213b474

Browse files
committed
Motivate PGA.
1 parent a1ee53d commit 213b474

File tree

5 files changed

+64
-47
lines changed

5 files changed

+64
-47
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "vee"
3-
version = "0.1.2"
3+
version = "0.1.3"
44
rust-version = "1.85.0"
55
edition = "2024"
66
description = "Vector Expression Emitter (VEE): Geometric Algebra Code Generator"

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ coefficients.
2525
* Uniquely reduce symbolic multivector expressions.
2626
* Generate expressions in text form.
2727
* Define the metric-agnostic basis (i.e., elliptic, parabolic, hyperbolic) and the multivector
28-
entities of the projective geometric algebra (PGA) for dimensions N < 6.
28+
entities of the projective geometric algebra (PGA) for dimensions D = N + 1 < 8.
2929

3030
## Roadmap
3131

RELEASES.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
# Version 0.1.3 (2025-09-15)
1+
# Version 0.1.3 (2025-09-18)
22

33
* Add projection operator. Supports rejection, i.e., projecting lower- onto higher-grade blade.
4-
* Use Unicode Diacritical Marks instead of ~/L/R.
4+
* Use Unicode *combining diacritical marks* instead of ~/L/R.
55
* Define 6D/7D PGA blades.
66

77
# Version 0.1.2 (2025-09-07)

src/lib.rs

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,27 @@
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
@@ -136,8 +146,9 @@
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

Comments
 (0)