Вы можете получить шкалы x и y матрицы, даже когда она повернута.
Вот код:
public static function getScaleX(m:Matrix):Number
{
return Math.sqrt(Math.pow(m.a + m.b, 2));
}
public static function getScaleY(m:Matrix):Number
{
return Math.sqrt(Math.pow(m.c + m.d, 2));
}
Объяснение:
Я нашелчто A B C D
проще воспринимать как точки, которые определяют оси x и y в преобразованном координатном пространстве.A, B
- это позиция первой точки преобразованной оси x (единичная матрица имеет их как 1, 0
, которая не преобразуется), а C, D
- это положение первой точки преобразованной оси y (единица.значения 0, 1
).
Если у нас есть матрица, которая масштабирует ось х на 2, тогда A, B
будет 2, 0
.Остальные точки на оси x будут находиться на таком же расстоянии от последней (поэтому на 2 точки дальше от последней).
Если у нас есть матрица, которая будет вращаться на 90 градусов по часовой стрелке, то A, B
будет0, 1
(указывающая ось x вдоль положительной стороны оси y) и C, D
будет -1, 0
(направленная ось y вниз по отрицательной стороне оси x).
Шкалаось х - это расстояние до первой точки.В сценариях, которые я упомянул, масштаб легко найти.В предыдущем примере A, B
равно 0, 1
, поэтому масштаб равен 1. Если вращение не включено с шагом 90 градусов, вы можете найти длину отрезка от 0, 0
до A, B
, используя теорему Пифагора.: sqrt (a ^ 2 + b ^ 2) = c.Это то, что делает мой код.
Надеюсь, это кому-нибудь поможет.