Geometric algebra is great if you want to extend things to higher dimensions, or spaces with different metric signatures (the 4-dimensional spacetime for example). But quaternions should not be discounted just because they fit into a generalisation - they have many quite special properties all of their own.
I always felt like quaternions weren't a perfect fit for 3d rotation, and when I finally learned about bivectors my faith in the elegance of mathematics was restored :D
I liked this article: https://marctenbosch.com/quaternions/
Yikes! This is the sort of thing that scares people away from complex numbers from a young age.
> Personally, I have always found it important to actually understand the things I am using. I remember learning about Cross Products and Quaternions and being confused about why they worked this way, but nobody talked about it. Later on I learned about Geometric Algebra and suddenly I could see that the questions I had were legitimate, and everything became so much clearer.
Clearly, "who cares as long as" is not the true belief of the author, but rather a mocking call-out of teachers who do think that way.
No really, unit quaternions are nice because it's pretty clear they belong to a sphere, therefore you can fairly easily extend geometric methods on the usual sphere to perform filtering, averaging, interpolation etc on rotations.
With GA it's not so obvious.
I've read linear and geometric algebra and it's amazing for linear operations. Unfortunately it gets more complex when you want to use it for nonlinear operations (such as translation) - now you need to use CGA or PGA or something. Still, seems like it would be amazing for computer graphics, physical simulation, etc. especially if someone can figure out a good strategy for efficient compilation (e.g. representing a multivector with exactly the minimal number of non-zero entries, with non-zero basis elements tracked at compile time).
Game engines don't need much if anything from GA (and I've written about using GA decades ago for software, and did it for some time, before realizing that trading that elegance for worse performance was not worth it).
Here's [1] one example from the godfather of GA demonstrating how poorly GA performs
[1] https://webspace.science.uu.nl/~kreve101/asci/GAraytracer.pd...
and I was surprised at how high dimensionality you could go. I'd like to see a c++20 version.
You can get it that small, it's all been done, but that's far larger than a quat, which can be stored in 3 components when normalized, and in 4 for quick and easy computation.
For large models and more importantly scarce GPU memory, increasing model size results in less complex models and slower computation.
There really is no benefit for 3D engines I can tell (and I was early on the GA bandwagon 20ish years ago... It just has not and I suspect will never pan out due to the inefficiencies not being worth it).
* https://www.jeremyong.com/klein/ * https://github.com/wrnrlr/g3
> The main cause for the lower performance of GA is the Gaigen’s soft typing of the geometric algebra objects at compile-time: all types of objects (scalars, vectors, bivectors, trivectors, rotors and so on) are represented by a single data type in Gaigen. When a product or operation has to be computed, Gaigen first checks the grade usage of the argument(s) and then acts accordingly. This conditional step between function call and actual computation is largely responsible for the drop in performance.
So, I blame the library. Writing out the 3-4 datatypes for 3D GA by hand as real types costs some development effort but should give equivalent performance.
There's a reason that after decades GA hasn't replaced quaternions, and it's not because people don't know how to optimize code by hand.
My impression is that if you want something compact that you'll need to either give up on performance (type erasure) or separate compilation (track every type).
GA is great for pen and paper proofs though.
Two heartbeats later, we're bearish on Q's.