Есть ли способ извлечь исходные координаты из холста в html?

#javascript #html5-canvas

#javascript #html5-холст

Вопрос:

Я имею в виду, что, допустим, у меня есть холст размером 100 X 100, и я сделал ctx.translate(50, 50) это. Есть ли метод или свойство, к которому я мог бы получить доступ для его извлечения? Например ctx.originCoordinates , или ctx.getOriginCoordinates() (в этом примере я ожидаю, что значение будет примерно таким [50, 50] ) У меня есть обходной путь, при котором я просто вручную обновляю переменную каждый раз, когда перевожу холст, но это кажется очень сложным / хрупким способом сделать это, и если есть лучший способ, я весь внимание, заранее спасибо.

Ответ №1:

ctx.getTransform вернет матрицу в виде DOMMatrix

Чтобы получить перевод, используйте

 const m = ctx.getTransform();
const translationX = m.e;
const translationY = m.y;
  

Если преобразование является равномерным (то есть ось Y находится на 90 градусов от оси x, а масштаб x и y одинаков, тогда вы можете получить вращение и масштабирование с помощью

 const rotate = Math.atan2(m.b, m.a);
const scale = Math.hypot(m.a, m.b);
  

Если есть неравномерный масштаб, то. Обратите внимание только на положительные значения

 const scaleX = Math.hypot(m.a, m.b);
const scaleY = Math.hypot(m.c, m.d);
  

И если есть перекос, вы можете получить направление как по оси X, так и по оси Y с помощью

 const rotateX = Math.atan2(m.b, m.a);
const rotateY = Math.atan2(m.d, m.c);
  

Обратите внимание, что вы можете использовать rotateX и rotateY для получения знака шкалы X и Y, если это необходимо

Вы можете установить преобразование одного холста из другого

 // set context A to the same transform as B
ctxA.setTransform(ctxB.getTransform());