La clase MatrixTransformer incluye métodos estáticos que aplican transformaciones geométricas de objetos Matrix.
Método transform()
El método
transform()
incluye parámetros para cada uno de los valores siguientes:
-
sourceMatrix
: matriz de entrada que es transformada por el método.
-
xScale
e
yScale
: factor de escala
x
e
y
.
-
dx
y
dy
: magnitudes de traslación
x
e
y
, representadas en píxeles.
-
rotation
: magnitud de rotación, expresada en grados.
-
skew
: factor de sesgo, como porcentaje.
-
skewType
: dirección del sesgo, ya sea
"right"
(derecha) o
"left"
(izquierda).
El valor devuelto es la matriz resultante.
El método
transform()
llama a los siguientes métodos estáticos de la clase:
-
skew()
-
scale()
-
translate()
-
rotate()
Cada uno devuelve la matriz de origen con la transformación aplicada.
Método skew()
El método
skew()
sesga la matiz ajustando las propiedades
b
y
c
de la misma. Un parámetro opcional,
unit
, determina las unidades que se utilizan para definir el ángulo de sesgo y, si es necesario, el método convierte el valor
angle
en radianes:
if (unit == "degrees")
{
angle = Math.PI * 2 * angle / 360;
}
if (unit == "gradients")
{
angle = Math.PI * 2 * angle / 100;
}
Se crea y se ajusta un objeto
skewMatrix
para aplicar la transformación de sesgo. Inicialmente, es la matriz de identidad:
var skewMatrix:Matrix = new Matrix();
El parámetro
skewSide
determina el lado en el que se aplica el sesgo. Si se establece en
"right"
, el código siguiente establece la propiedad
b
de la matriz:
skewMatrix.b = Math.tan(angle);
De lo contrario, el lado inferior se sesga ajustando la propiedad
c
de la matriz, del siguiente modo:
skewMatrix.c = Math.tan(angle);
El sesgo resultante se aplica a la matriz existente mediante la concatenación de las dos matrices, como se muestra en el ejemplo siguiente:
sourceMatrix.concat(skewMatrix);
return sourceMatrix;
Método scale()
Tal y como se muestra en el ejemplo, el método
scale()
ajusta primero el factor de escala si se proporciona como porcentaje y luego utiliza el método
scale()
del objeto de matriz:
if (percent)
{
xScale = xScale / 100;
yScale = yScale / 100;
}
sourceMatrix.scale(xScale, yScale);
return sourceMatrix;
Método translate()
El método
translate()
aplica simplemente los factores de traslación
dx
y
dy
llamando al método
translate()
del objeto de matriz:
sourceMatrix.translate(dx, dy);
return sourceMatrix;
Método rotate()
El método
rotate()
convierte el factor de rotación de entrada en radianes (si se proporciona en grados o gradientes), y luego llama al método
rotate()
del objeto de matriz:
if (unit == "degrees")
{
angle = Math.PI * 2 * angle / 360;
}
if (unit == "gradients")
{
angle = Math.PI * 2 * angle / 100;
}
sourceMatrix.rotate(angle);
return sourceMatrix;