Как рассчитать координаты для translate(x, y) относительно системы координат вьюпорта а не системы координат объекта?
Вот
этот комментарий отлично описывает проблему:
Самую интересную и неочевидную особенность трансформаций не отразили: то, что трансформация меняет именно систему координат объекта. Например, если объект повернуть на 90° по часовой, раскукожить вдвое и после этого попытаться сдвинуть на 100px вправо — на самом деле он сдвинется на 200px вниз, т.к. в его системе координат теперь ось X смотрит вниз (а ось Y — влево) и каждый «пиксель» в ней равен двум настоящим.
Дополнение #1:
https://yadi.sk/d/9I5hJGWChXSZU
На гифке два элемента: первый с углом поворота 0deg, второй же повёрнут на 30deg. Нужно передвинуть элемент с помощью mouse или touch событий. Казалось бы чего проще, считывай координаты из событий и в соответствии с ними передвигай объект, но, как выяснилось, с помощью transform: translate(x, y) позиция элемента задаётся относительно его системы координат, а не вьюпорта.