A general rotation needs sine and cosine, but the quarter-turn is exact on the integer lattice: (x, y) → (−y, x) rotates a point 90° counter-clockwise with nothing but a negation and a swap. It is multiplication by the Gaussian integer i, and it has order four: apply it four times and you return to the start, cycling a point through four positions. Unlike a reflection (dart 499), it is not an involution — two turns give the opposite point, not the original. The finite rotation group, exact and trig-free.
The demo rotates (3,1) by 90° four times and returns to (3,1) — while two turns give the opposite point: live demo
“Rotation always needs trig.” — the 90° turn is a negate-and-swap, exact on the lattice, multiplication by i. cited
A quarter-turn done exactly by a negate and a swap — a finite-order rotation, no trig. finite order
On the canonical compiler, (3,1) rotated four times returns to (3,1); two rotations give (−3,−1), not the original: