Все вращения будут вращаться вокруг начала координат. Таким образом, вы переводите на начало координат, поворачиваете, а затем переводите назад.
T = translate from global coordinates to user-coordinates
R = rotate around the origin (like in your link)
(T^-1) = translate back
point X
X_rotated = (T^-1)*R*T*X
Если у вас есть несколько точек для поворота, умножьте их вместе:
A = (T^-1)*R*T
X_rotated = A*X