Although I disagree with how the author describes quaternions as black boxes. The two questions he asks:
- Why does i2=j2=k2=−1 and ij=k? - Why do we take a vector and upgrade it to an "imaginary" vector in order to transform it, like q(xi+yj+zk)q∗?
Are clearly explained in these interactive videos created by Grant Sanderson and Ben Eater: https://eater.net/quaternions
After I watched those videos, quaternions stopped being so opaque to me. I recommend them :-)
if you already understand quaternions, then they're apparently excellent; everyone who understands quaternions recommends them.
I don't understand quaternions. I do not understand videos which attempt to explain them. I've seen them all a dozen times each.
GA breaks down quaternions (and their generalization to arbitrary dimensions) into smaller pieces that are much more obvious.
It takes hundreds of years to invent quaternions from scratch, but it takes 10 minutes to invent quaternions from GA.
And if anything, I don't think the engine is the problem. He already shipped 4D toys, which I suspect is a way to monetize the devtools he made for Miegakure (nothing wrong with that). And even before that, the 4D was fine.
But while it is nice having good 4D, turning it into an entertaining game with good graphics, good puzzle design, a story that doesn't suck (even a simple one), etc... is hard. And we are not talking about a FPS or 2D platformer here, there are no game design books about making games like Miegakure, and there are many, many things that can go wrong. And to be honest, I hope for the best, but I don't expect much.
One big difficulty I see is that not only the designers have to understand 4D to make interesting worlds/puzzles, but the game has to teach that to players too, with the right difficulty curve.
I'm far from good at math but the GA article linked above has this comparision of quaternion code vs rotor (GA) code
The basis of G3 is 1,x,y,z,xy,xz,yz,xyz. Quaternions only have 1,xy,xz,yz. Quaternion multiplications are closed; xyyz = xz, xyxz = -yz, xzyz = -xy. xyxy=-1. If your compiler is smart enough to figure out that x,y,z,xyz are always zero, you can save the extraneous operations.
I completely agree with the sentiment that the algebraic mumbo jumbo often used to introduce quaternions is not very satisfying. Fortunately, as quantum computing becomes a mainstream topic, more people will have to learn about "Rotations on the Bloch sphere" [0] -- and then quaternions and rotations actually make sense.
[0] https://en.wikipedia.org/wiki/Bloch_sphere#Rotations_about_a...
https://marctenbosch.com/quaternions/
It is called "Let's remove Quaternions from every 3D Engine". The author suggests replacing quaternions with rotors and geometric algebra. In 3D, the formulas are essentially the same, but framed differently. It makes some "surprising" properties more intuitive and is extensible to any number of dimensions. The last part is especially relevant to the author as he is developing "Miegakure", a 4D game (i.e. the game world has 4 spatial dimensions).