Я пытаюсь написать некоторый код, который позволяет пользователю произвольно перетаскивать изображение вокруг холста, изменять его размер и поворачивать изображение с помощью мыши.У меня возникли проблемы с тригонометрией.
Все точки интереса относительно центра изображения.На рисунке ниже мышь находится в абсолютном положении 850, 400 (относительно левого верхнего холста).Поскольку вращения нет, я легко могу понять, что мышь находится в относительном положении 250, 0 (относительно центра изображения).
После того, как я поверну изображение на 270 ° и поставлю мышь в то же положение, абсолютное значение будет 600, 150 .Относительное положение точно такое же, как и до поворота ( 250, 0 ).
Учитывая абсолютноекоординаты центральной точки изображения, его вращения и абсолютного положения мыши, как определить преобразованные, повернутые координаты мыши относительно центра изображения?
Я перепробовал много вещей и попытался адаптировать ответы на аналогичные вопросы StackOverflow.Моя текущая попытка использует класс Matrix, который кто-то опубликовал в Gist.
layerRelativePoint(x, y, layer){
var radians = layer.rotation * (Math.PI/180);
var matrix = new Matrix();
matrix.translate(-layer.x, -layer.y);
matrix.rotate(radians);
var [x, y] = matrix.transformPoint(x, y);
return {x, y};
}
Демо: https://plnkr.co/edit/T9XCfpZVlMWLMY67bOvW?p=preview