Double cover of SO(3), the belt trick, and quaternion rotations
Unit quaternions cover every 3D rotation twice. That is why a plate on ribbons needs two full turns, not one, to come back untangled.
Turn the camera around the 3-sphere, projected into 3D and colored by distance from the identity. Use the pair selector to highlight antipodal pairs q and −q.
SU(2), the group of 2×2 unitary matrices with determinant 1, is topologically a 3-sphere S³. It maps onto SO(3) in a 2-to-1 fashion: every rotation corresponds to exactly two unit quaternions, q and −q. This double cover is not just a mathematical curiosity — it's the reason spin-½ particles need a 720° rotation to return to their original state.
The unit quaternions form a 3-sphere S³ in 4D space. Using stereographic projection, we can visualize this as a point cloud in ℝ³, colored by distance from the identity. Toggle the display to highlight antipodal pairs — each pair (q, −q) represents the same rotation in SO(3).
Rotate the plate one full turn: the ribbons stay twisted. Keep going to 720° and watch them untwist completely.
The famous belt trick demonstrates this physically: a plate connected to a frame by belts can't undo a 360° twist, but a 720° twist unwinds perfectly. Quaternions also provide the smoothest interpolation between rotations via SLERP, which is why they're the representation of choice in computer graphics and aerospace.
This demonstration shows why SU(2) is a double cover of SO(3). A plate connected to a frame by ribbons is rotated. After a 360° rotation, the belts are twisted and cannot be untwisted without rotating further. But after a full 720° rotation, the belts miraculously untwist — proving that the loop in SO(3) lifts to a closed path in SU(2) only after going around twice.
Key insight: The fundamental group π₁(SO(3)) = ℤ/2ℤ means there is exactly one non-trivial class of loops in SO(3). The 360° loop is non-contractible; the 720° loop is contractible. SU(2), being simply connected, resolves this by “unrolling” the ambiguity.
Adjust the four components a, b, c, d (they are kept at unit length) and see the rotation applied. Toggle −q and check that the rotation does not change.
A unit quaternion q = a + bi + cj + dk encodes a rotation: the vector (b,c,d) gives the axis scaled by sin(θ/2), and a = cos(θ/2). Adjust the four components (auto-normalized to unit length) and see the rotation applied. Toggle −q to verify that both quaternions give the same rotation.
Slide t to interpolate with quaternions and with Euler angles side by side. The angular velocity graph stays flat for quaternion SLERP and wobbles for Euler angles.
Interpolating between rotations using Euler angles produces uneven, jerky motion with possible gimbal lock artifacts. Quaternion SLERP, by contrast, traces a geodesic on S³, giving perfectly smooth constant-speed interpolation. Compare the two side-by-side and watch the angular velocity graph to see the smoothness difference.
Spot a mistake or have an idea?