Projective geometric algebra
Two reflections in PGA 2D
One reflection reverses orientation. Two reflections restore orientation and become an ordinary rigid motion: rotation when the mirrors meet, translation when the mirrors are parallel.
The previous article used a normalized line as an operator. This page composes two such operators. We stay in Algebra(2,0,1): lines are grade-1 vectors, finite points are grade-2 bivectors, and the action is still written with ganja's >>> sandwich operator.
When the mirrors intersect away from the origin, their meet is already the rotation center. Arbitrary-center rotation comes directly from the algebra.
In homogeneous 1-up coordinates, the same 2D lines become planes through the origin, and finite points become rays through the W = 1 chart.
Compose The Actions
Start with two normalized mirror lines:
mirrorA = lineA / sqrt(lineA.e1 * lineA.e1 + lineA.e2 * lineA.e2)
mirrorB = lineB / sqrt(lineB.e1 * lineB.e1 + lineB.e2 * lineB.e2)Applying mirror A and then mirror B is nested sandwich action:
intermediate = mirrorA >>> P
final = mirrorB >>> intermediateThe original polygon, the intermediate one-reflection result, and the final two-reflection result share the same signed-area measurement. The sign flips after the first reflection and returns after the second.
Intersecting Mirrors Rotate
If the mirrors meet, their meet is a finite point:
center = mirrorA ^ mirrorBThat point is the rotation center. It can be anywhere in the plane. Nothing about the construction privileges the coordinate origin; the origin is only where the chosen chart puts (0,0).
The rotation angle is twice the angle from the first mirror to the second mirror. Distances from the center to any point are preserved by the composed motion.
Parallel Mirrors Translate
If the mirrors are parallel, mirrorA ^ mirrorB is an ideal point. There is no finite rotation center. The same nested sandwich action becomes a translation.
The translation direction is perpendicular to the mirrors, from mirror A toward mirror B, and its distance is twice the signed separation between the two mirror lines. Every vertex receives that same displacement.
Packaging The Motion As A Motor
The nested action can also be packaged as one even multivector:
composed = mirrorB * mirrorAThe two-reflection action can be read step by step: apply one mirror, then the other. The even multivector packages the same motion as an operator, which leads to motors, generators, and exponentials.