Гомогенные координаты:
[ cos(theta) -sin(theta) 0 ]
Rotate = [ sin(theta) cos(theta) 0 ]
[ 0 0 1 ]
[ 1 0 x ]
Translate = [ 0 1 y ]
[ 0 0 1 ]
Таким образом, чтобы выполнить преобразование, вы умножаете Translate(x, y) * Rotate(theta) * Translate(-x, -y)
и получаете матрицу преобразования.