Klasa MatrixTransformer zawiera metody statyczne, które stosują transformacje geometryczne opisane przez obiekty klasy Matrix.
Metoda transform()
Metoda
transform()
ma następujące parametry:
-
sourceMatrix
— macierz wejściowa, którą metoda będzie transformować.
-
xScale
i
yScale
— współczynniki skalowania w osi
x
i
y
.
-
dx
i
dy
— zmiany położenia w osi
x
i
y
, wyrażone w pikselach.
-
rotation
— obrót w stopniach.
-
skew
— współczynnik pochylenia wyrażony procentowo.
-
skewType
— kierunek pochylenia,
"right"
(w prawo) albo
"left"
(w lewo).
Wartością zwracaną jest wynikowa macierz.
Metoda
transform()
wywołuje następujące metody statyczne klasy:
-
skew()
-
scale()
-
translate()
-
rotate()
Każda z tych metod zwraca macierz źródłową poddaną transformacji.
Metoda skew()
Metoda
skew()
pochyla macierz, modyfikując jej właściwości
b
i
c
. Opcjonalny parametr
unit
określa jednostki, w jakich wyrażony jest kąt pochylenia; w razie potrzeby metoda przelicza wartość
angle
na radiany:
if (unit == "degrees")
{
angle = Math.PI * 2 * angle / 360;
}
if (unit == "gradients")
{
angle = Math.PI * 2 * angle / 100;
}
Tworzony jest obiekt klasy Matrix o nazwie
skewMatrix
, a jego właściwości są odpowiednio modyfikowane w celu zastosowania pochylenia. Początkowo jest to macierz jednostkowa:
var skewMatrix:Matrix = new Matrix();
Parametr
skewSide
określa, w którą stronę ma się odbywać pochylenie. Jeśli właściwość ta ma wartość
"right"
, poniższy kod nadaje wartość właściwości
b
macierzy:
skewMatrix.b = Math.tan(angle);
W przeciwnym razie pochylana jest dolna strona w wyniku zmiany wartości właściwości
c
obiektu Matrix:
skewMatrix.c = Math.tan(angle);
Wynikowe pochylenie jest następnie stosowane do istniejącej macierzy poprzez konkatenację dwóch macierzy, co ilustruje poniższy przykład:
sourceMatrix.concat(skewMatrix);
return sourceMatrix;
Metoda scale()
Tak, jak ilustruje to poniższy przykład, metoda
scale()
najpierw dopasowuje współczynnik skali, jeśli został podany jako wartość procentowa, a następnie wywołuje metodę
scale()
obiektu macierzy:
if (percent)
{
xScale = xScale / 100;
yScale = yScale / 100;
}
sourceMatrix.scale(xScale, yScale);
return sourceMatrix;
Metoda translate()
Metoda
translate()
uwzględnia współczynniki translacji
dx
i
dy
, wywołując metodę
translate()
obiektu macierzy:
sourceMatrix.translate(dx, dy);
return sourceMatrix;
Metoda rotate()
Metoda
rotate()
przelicza podany kąt obrotu na radiany (jeśli podano go w stopniach lub gradusach), a następnie wywołuje metodę
rotate()
obiektu macierzy:
if (unit == "degrees")
{
angle = Math.PI * 2 * angle / 360;
}
if (unit == "gradients")
{
angle = Math.PI * 2 * angle / 100;
}
sourceMatrix.rotate(angle);
return sourceMatrix;