A classe MatrixTransformer inclui métodos estáticos que aplicam transformações geométricas de objetos Matrix.
O método transform()
O método
transform()
inclui parâmetros para cada um dos itens a seguir:
-
sourceMatrix
— a matriz de entrada, que o método transforma
-
xScale
e
yScale
— o fator de dimensionamento
x
e
y
-
dx
e
dy
— os valores de transposição
x
e
y
, em pixels
-
rotation
— o valor de rotação, em graus
-
skew
— o fator de inclinação, em porcentagem
-
skewType
— a direção da inclinação
"right"
ou
"left"
O valor de retorno é a matriz resultante.
O método
transform()
chama os seguintes métodos estáticos da classe:
-
skew()
-
scale()
-
translate()
-
rotate()
Cada um retorna a matriz de origem com a transformação aplicada.
O método skew()
O método
skew()
inclina a matriz, ajustando as propriedades
b
e
c
da matriz. Um parâmetro opcional,
unit
, determina as unidades usadas para definir o ângulo de inclinação e, se necessário, o método converte o valor
angle
em radianos:
if (unit == "degrees")
{
angle = Math.PI * 2 * angle / 360;
}
if (unit == "gradients")
{
angle = Math.PI * 2 * angle / 100;
}
Um objeto Matrix
skewMatrix
é criado e ajustado para aplicar a transformação de inclinação. Inicialmente, é a matriz de identidade, como a seguir:
var skewMatrix:Matrix = new Matrix();
O parâmetro
skewSide
determina o lado para o qual a inclinação é aplicada. Se for definida como
"right"
, o seguinte código define a propriedade
b
da matriz:
skewMatrix.b = Math.tan(angle);
Caso contrário, o lado inferior é inclinado ajustando a propriedade
c
de Matrix, como a seguir:
skewMatrix.c = Math.tan(angle);
A inclinação resultante é aplicada à matriz existente, concatenando as duas matrizes, como mostra o seguinte exemplo:
sourceMatrix.concat(skewMatrix);
return sourceMatrix;
O método scale()
Ο exemplo a seguir mostra que o método
scale()
primeiro ajusta o fator de dimensionamento, caso seja fornecido como uma porcentagem e, em seguida, usa o método
scale()
do objeto da matriz:
if (percent)
{
xScale = xScale / 100;
yScale = yScale / 100;
}
sourceMatrix.scale(xScale, yScale);
return sourceMatrix;
O método translate()
O método
translate()
apenas aplica os fatores de transposição
dx
e
dy
chamando o método
translate()
do objeto da matriz, como a seguir:
sourceMatrix.translate(dx, dy);
return sourceMatrix;
O método rotate()
O método
rotate()
converte o fator de rotação de entrada em radianos (se fornecido em graus ou gradientes) e chama o método
rotate()
do objeto da matriz:
if (unit == "degrees")
{
angle = Math.PI * 2 * angle / 360;
}
if (unit == "gradients")
{
angle = Math.PI * 2 * angle / 100;
}
sourceMatrix.rotate(angle);
return sourceMatrix;