Projective geometric algebra
Motors and exponentials in PGA 2D
Two reflections gave us a motion. Now we name that motion operator: an even multivector that acts on points by sandwiching. Exponentials map infinitesimal generators to finite motions.
The previous article ended with composed = mirrorB * mirrorA. That product is an even multivector. With unit motor normalization, it can move finite points, lines, and whole shapes while preserving distances.
The action is still the same ganja sandwich operator:
P' = M >>> PFor off-origin rotation, the finite point generator stores the rotation center inside the motor.
Generators Become Motions
A generator describes the infinitesimal motion. Exponentiating it gives the finite motor:
generator -> infinitesimal motion
M = exp(generator)
P' = M >>> PThis is the same exponential pattern used by complex numbers and quaternions: an infinitesimal direction maps to a finite rotation-like operator. In PGA the generator can also live in the ideal part, which gives pure translations.
The Half-Angle
For a rotation around a finite point C, the motor uses half the desired angle:
M = exp((-angle / 2) * C)The half-angle comes from the two-sided sandwich action. The motor acts on the object from both sides, so the finite rotation seen by the point is twice the angle stored in the motor.
In ordinary graphics code, arbitrary-center rotation is often expressed as translate-to-origin, rotate, and translate-back. The PGA motor stores the center point in the generator.
Translations Are Nilpotent
A translation by a chart displacement (tx, ty) uses an ideal generator:
generator = -(tx / 2) e01 - (ty / 2) e02The ideal basis blades square away to zero in this pure translation combination, so generator * generator = 0. That means the exponential series truncates:
T = exp(generator) = 1 + generatorPure translations use the same sandwich operation as rotation motors.
Matrix Comparison
A familiar 3x3 transform matrix is useful as a comparison, but the motion is already defined by the motor action:
P' = M >>> P
-> normalized finite point bivector
-> comparable 2D matrix when usefulThe matrix is another representation of the same rigid motion. The geometric object is moved by the motor.