biVector forum

Scaling Rotations in 4D

I’ve used geometric algebra to make computer graphics of rotating 4D objects. The problem I am having is making rotors with the correct scale. That is, I want to do exactly one rotation in 200 steps. I can do this with e1e2 or e1e2+e3e4 as a bivector. A normalized e1e2+e2e3 also works. Even (1/2)e1e2+(2)e3e4. But I just guessed and hacked those weights. I don’t understand them. So when I have something like a*(e1e2+e2e3+e3e4) I don’t know what a should be. Any help?

Hi @PatrickPowers

Generating rotations can be done in a number of ways. Here’s two:

  • Given two normalized same-grade elements A,B the rotor \sqrt{B / A} will rotate A into B. The square root there is easy to calculate as \sqrt{x} = \overline{1 + x} where the bar denotes normalisation.

  • Exponentiation of any bivector will generate a rotation in the plane represented by that bivector. Thus the expression e^{-\frac{\alpha}{2}B} generates a rotor of \alpha radians in the plane represented by B. This exponential can be calculated using e.g. the Taylor expansion e^{x} = \sum \frac {x^n} {n!}.

Both these techniques will produce valid rotors, i.e. multivectors with only even-grade components that have a norm of 1.

I suspect you are using the Algebra \mathbb R_{4,0} for your implementation? If so, things may become a lot easier by considering the 1-up model \mathbb R_{4,0,1}, where you would also get translations and a natural representation or arbitrary points, lines, planes and volumes. A short example implementation that displays a rotating tesseract and its higher dimensional equivalents is here:



1 Like