Пакет | flash.geom |
Класс | public class Matrix |
Наследование | Matrix ![]() |
Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
matrix
объекта Transform и последующего применения объекта Transform в качестве свойства transform
к экранному объекту. Эти функции преобразования включают перемещение (изменение положения осей x и y), поворот, масштабирование и наклон.
Все эти преобразования называются аффинные преобразования. При аффинных преобразованиях сохраняется прямолинейность линий, поэтому параллельные линии остаются параллельными.
Чтобы применить матрицу преобразования к экранному объекту, необходимо создать объект Transform, настроить его свойство matrix
для матрицы преобразования, а затем настроить свойство transform
экранного объекта для объекта Transform. Объекты матрицы также используются как параметры в некоторых методах, например:
draw()
объекта BitmapData;beginBitmapFill()
, beginGradientFill()
или lineGradientStyle()
объекта Graphics.Объект матрицы преобразования является матрицей размерностью 3x3 со следующим содержимым:
В традиционных матрицах преобразования свойства u
, v
и w
предоставляют дополнительные возможности. Класс Matrix можно использовать только в двумерном пространстве, поэтому при его использовании всегда подразумевается, что значения свойств u
и v
равны 0,0, а значение свойства w
равно 1,0. Эффективными значениями матрицы являются следующие:
Можно получить и настроить значения остальных шести свойств объекта Matrix: a
, b
, c
, d
, tx
и ty
.
Класс Matrix поддерживает четыре основных типа преобразований: перемещение, масштабирование, поворот и наклон. С помощью специальных методов можно настроить три из перечисленных преобразования, как описано в следующей таблице:
Преобразование | Метод | Значения матрицы | Отображаемый результат | Описание |
---|---|---|---|---|
Перемещение (перестановка) |
translate(tx, ty)
|
![]() |
![]() | Перемещение пикселов tx изображения вправо, а пикселов ty вниз. |
Масштабирование |
scale(sx, sy)
|
![]() |
![]() | Изменение размера изображения, умножение расположения каждого пиксела на величину sx по оси x и sy по оси y. |
Поворот |
rotate(q)
|
![]() |
![]() | Поворот изображения на угол q , который измеряется в радианах. |
Наклон или сдвиг | Нет; необходимо настроить свойства b и c
|
![]() |
![]() | Постепенный сдвиг изображения параллельно оси x или y. Свойство b объекта Matrix представляет тангенс угла наклона по оси y; свойство c объекта Matrix представляет тангенс угла наклона по оси x. |
Каждая функция преобразования изменяет текущие свойства матрицы, поэтому можно эффективно комбинировать несколько преобразований. Для этого необходимо вызвать несколько функций преобразования перед применением матрицы к целевому экранному объекту (при использовании свойства transform
этого экранного объекта).
Используйте конструктор new Matrix()
для создания объекта Matrix перед вызовом методов объекта Matrix.
См. также
Свойство | Определено | ||
---|---|---|---|
a : Number
Значение, от которого зависит размещение пикселов вдоль оси x при масштабировании или повороте изображения. | Matrix | ||
b : Number
Значение, от которого зависит размещение пикселов вдоль оси y при повороте или наклоне изображения. | Matrix | ||
c : Number
Значение, от которого зависит размещение пикселов вдоль оси x при повороте или наклоне изображения. | Matrix | ||
![]() | constructor : Object
Ссылка на объект класса или функцию конструктора для данного экземпляра объекта. | Object | |
d : Number
Значение, от которого зависит размещение пикселов вдоль оси y при масштабировании или повороте изображения. | Matrix | ||
![]() | prototype : Object [статические]
Ссылка на модель объекта класса или функции. | Object | |
tx : Number
Расстояние, на которое перемещается каждая точка вдоль оси x. | Matrix | ||
ty : Number
Расстояние, на которое перемещается каждая точка вдоль оси y. | Matrix |
Метод | Определено | ||
---|---|---|---|
Создает новый объект Matrix с заданными параметрами. | Matrix | ||
Возвращает новый объект Matrix, который является клоном данной матрицы с точной копией содержащегося в ней объекта. | Matrix | ||
Сцепляет матрицу с текущей матрицей, фактически объединяя геометрические искажения двух матриц. | Matrix | ||
Включает параметры для масштабирования, поворота и перемещения. | Matrix | ||
createGradientBox(width:Number, height:Number, rotation:Number = 0, tx:Number = 0, ty:Number = 0):void
Создает особый стиль матрицы, ожидаемый методами beginGradientFill() и lineGradientStyle() класса Graphics. | Matrix | ||
Для точки в пространстве координат до преобразования возвращает ее координаты после преобразования. | Matrix | ||
![]() |
Показывает, определено ли заданное свойство для объекта. | Object | |
Задает каждому свойству матрицы значение, приводящее к нулевому преобразованию. | Matrix | ||
Выполняет обратное преобразование исходной матрицы. | Matrix | ||
![]() |
Показывает, есть ли экземпляр класса Object в цепи прототипов объекта, заданного в качестве параметра. | Object | |
![]() |
Показывает наличие заданного свойства и его перечисляемость. | Object | |
Применяет преобразование поворотом к объекту Matrix. | Matrix | ||
Применяет преобразование масштабированием к объекту Matrix. | Matrix | ||
![]() |
Задает доступность динамического свойства для операций цикла. | Object | |
Возвращает текстовое значение, содержащее список свойств объекта Matrix. | Matrix | ||
Возвращает результат применения геометрического преобразования, представленного объектом Matrix в заданной точке. | Matrix | ||
Перемещение матрицы вдоль осей x и y, как задано параметрами dx и dy. | Matrix | ||
![]() |
Возвращает элементарное значение заданного объекта. | Object |
a | свойство |
public var a:Number
Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Значение, от которого зависит размещение пикселов вдоль оси x при масштабировании или повороте изображения.
myMatrix
и настройка его значения a
.
import flash.geom.Matrix; var myMatrix:Matrix = new Matrix(); trace(myMatrix.a); // 1 myMatrix.a = 2; trace(myMatrix.a); // 2
b | свойство |
public var b:Number
Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Значение, от которого зависит размещение пикселов вдоль оси y при повороте или наклоне изображения.
myMatrix
и настройка его значения b
.
import flash.geom.Matrix; var myMatrix:Matrix = new Matrix(); trace(myMatrix.b); // 0 var degrees:Number = 30; var radians:Number = (degrees/180) * Math.PI; myMatrix.b = Math.tan(radians); trace(myMatrix.b); // 0.5773502691896257
c | свойство |
public var c:Number
Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Значение, от которого зависит размещение пикселов вдоль оси x при повороте или наклоне изображения.
myMatrix
и настройка его значения c
.
import flash.geom.Matrix; var myMatrix:Matrix = new Matrix(); trace(myMatrix.c); // 0 var degrees:Number = 30; var radians:Number = (degrees/180) * Math.PI; myMatrix.c = Math.tan(radians); trace(myMatrix.c); // 0.5773502691896257
d | свойство |
public var d:Number
Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Значение, от которого зависит размещение пикселов вдоль оси y при масштабировании или повороте изображения.
myMatrix
и настройка его значения d
.
import flash.geom.Matrix; var myMatrix:Matrix = new Matrix(); trace(myMatrix.d); // 1 myMatrix.d = 2; trace(myMatrix.d); // 2
tx | свойство |
public var tx:Number
Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Расстояние, на которое перемещается каждая точка вдоль оси x.
myMatrix
и настройка его значения tx
.
import flash.geom.Matrix; var myMatrix:Matrix = new Matrix(); trace(myMatrix.tx); // 0 myMatrix.tx = 50; // 50 trace(myMatrix.tx);
ty | свойство |
public var ty:Number
Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Расстояние, на которое перемещается каждая точка вдоль оси y.
myMatrix
и настройка его значения ty
.
import flash.geom.Matrix; var myMatrix:Matrix = new Matrix(); trace(myMatrix.ty); // 0 myMatrix.ty = 50; trace(myMatrix.ty); // 50
Matrix | () | Конструктор |
public function Matrix(a:Number = 1, b:Number = 0, c:Number = 0, d:Number = 1, tx:Number = 0, ty:Number = 0)
Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Создает новый объект Matrix с заданными параметрами. В матричном представлении свойства упорядочиваются следующим образом:
Если в конструкторе new Matrix()
не указаны параметры, он создает единичную матрицу со следующими значениями:
В матричном представлении единичная матрица имеет следующий вид:
a:Number (default = 1 ) — Значение, от которого зависит размещение пикселов вдоль оси x при масштабировании или повороте изображения.
| |
b:Number (default = 0 ) — Значение, от которого зависит размещение пикселов вдоль оси y при повороте или наклоне изображения.
| |
c:Number (default = 0 ) — Значение, от которого зависит размещение пикселов вдоль оси x при повороте или наклоне изображения.
| |
d:Number (default = 1 ) — Значение, от которого зависит размещение пикселов вдоль оси y при масштабировании или повороте изображения.
| |
tx:Number (default = 0 ) — Расстояние, на которое перемещается каждая точка вдоль оси x.
| |
ty:Number (default = 0 ) — Расстояние, на которое перемещается каждая точка вдоль оси y.
|
matrix_1
создается без передачи параметров в конструктор Matrix()
, а матрица matrix_2
с передачей параметров. Обратите внимание, что матрица matrix_1
, которая была создана без параметров, является единичной матрицей со значениями a
=1, b
=0, c
=0, d
=1, tx
=0, ty
=0.
import flash.geom.Matrix; var matrix_1:Matrix = new Matrix(); trace(matrix_1); // (a=1, b=0, c=0, d=1, tx=0, ty=0) var matrix_2:Matrix = new Matrix(1, 2, 3, 4, 5, 6); trace(matrix_2); // (a=1, b=2, c=3, d=4, tx=5, ty=6)
clone | () | метод |
public function clone():Matrix
Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Возвращает новый объект Matrix, который является клоном данной матрицы с точной копией содержащегося в ней объекта.
ВозвращаетMatrix — Объект Matrix.
|
concat | () | метод |
public function concat(m:Matrix):void
Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Сцепляет матрицу с текущей матрицей, фактически объединяя геометрические искажения двух матриц. В математическом представлении сцепление двух матриц равнозначно сложению матриц с использованием умножения.
Например, если матрица m1
масштабирует объект с использованием коэффициента, равного четырем, а матрица m2
поворачивает объект на 1,5707963267949 радиан (Math.PI/2
), то m1.concat(m2)
преобразует m1
в матрицу, которая выполняет масштабирование объекта с коэффициентом, равным четырем, и поворачивает объект на Math.PI/2
радиан.
Этот метод заменяет исходную матрицу сцепленной матрицей. Если необходимо выполнить сцепление двух матриц без изменения этих двух исходных матриц, сначала скопируйте исходную матрицу с помощью метода clone()
, как показано в разделе примеров классов.
Параметры
m:Matrix — Матрица, которая будет сцеплена с исходной матрицей.
|
createBox | () | метод |
public function createBox(scaleX:Number, scaleY:Number, rotation:Number = 0, tx:Number = 0, ty:Number = 0):void
Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Включает параметры для масштабирования, поворота и перемещения. При применении к матрице задает матричные значения на основе этих параметров.
С помощью метода createBox()
можно получить такую же матрицу, как и с помощью последовательного применения методов identity()
, rotate()
, scale()
и translate()
. Например, запись mat1.createBox(2,2,Math.PI/4, 100, 100)
аналогичная следующей записи:
import flash.geom.Matrix; var mat1:Matrix = new Matrix(); mat1.identity(); mat1.rotate(Math.PI/4); mat1.scale(2,2); mat1.translate(10,20);
Параметры
scaleX:Number — Коэффициент масштабирования по горизонтали.
| |
scaleY:Number — Коэффициент масштабирования по вертикали.
| |
rotation:Number (default = 0 ) — Угол поворота (в радианах).
| |
tx:Number (default = 0 ) — Число пикселов для перемещения вправо вдоль оси x.
| |
ty:Number (default = 0 ) — Число пикселов для перемещения вниз вдоль оси y.
|
См. также
myMatrix
задаются вызовом его метода createBox()
.
package { import flash.display.Shape; import flash.display.Sprite; import flash.geom.Matrix; import flash.geom.Transform; public class Matrix_createBox extends Sprite { public function Matrix_createBox() { var myMatrix:Matrix = new Matrix(); trace(myMatrix.toString()); // (a=1, b=0, c=0, d=1, tx=0, ty=0) myMatrix.createBox(1, 2, Math.PI/4, 50, 100); trace(myMatrix.toString()); // (a=0.7071067811865476, b=1.414213562373095, c=-0.7071067811865475, // d=1.4142135623730951, tx=100, ty=200) var rectangleShape:Shape = createRectangle(20, 80, 0xFF0000); addChild(rectangleShape); var rectangleTrans:Transform = new Transform(rectangleShape); rectangleTrans.matrix = myMatrix; } public function createRectangle(w:Number, h:Number, color:Number):Shape { var rect:Shape = new Shape(); rect.graphics.beginFill(color); rect.graphics.drawRect(0, 0, w, h); addChild(rect); return rect; } } }
createGradientBox | () | метод |
public function createGradientBox(width:Number, height:Number, rotation:Number = 0, tx:Number = 0, ty:Number = 0):void
Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Создает особый стиль матрицы, ожидаемый методами beginGradientFill()
и lineGradientStyle()
класса Graphics. Ширина и высота масштабируются до пары scaleX
/scaleY
, а значения tx
/ty
являются коррекцией с половинными значениями ширины и высоты.
Например, рассмотрим градиент со следующими характеристиками:
GradientType.LINEAR
[0, 255]
SpreadMethod.PAD
InterpolationMethod.LINEAR_RGB
В следующем примере показаны градиенты, в которых матрица была определена с помощью метода createGradientBox()
с различными настройками параметров:
Параметры createGradientBox() | Итоговый градиент |
---|---|
width = 25; height = 25; rotation = 0; tx = 0; ty = 0; | ![]() |
width = 25; height = 25; rotation = 0; tx = 25; ty = 0; | ![]() |
width = 50; height = 50; rotation = 0; tx = 0; ty = 0; | ![]() |
width = 50; height = 50; rotation = Math.PI / 4; // 45° tx = 0; ty = 0; | ![]() |
Параметры
width:Number — Ширина градиентного прямоугольника.
| |
height:Number — Высота градиентного прямоугольника.
| |
rotation:Number (default = 0 ) — Угол поворота (в радианах).
| |
tx:Number (default = 0 ) — Расстояние перемещения (в пикселах) вправо вдоль оси x. Это значение является коррекцией с половинным значением параметра width .
| |
ty:Number (default = 0 ) — Расстояние перемещения (в пикселах) вниз по оси y. Это значение является коррекцией с половинным значением параметра height .
|
См. также
myMatrix
задаются вызовом его метода createBox()
.
package { import flash.display.GradientType; import flash.display.Sprite; import flash.geom.Matrix; public class Matrix_createGradientBox extends Sprite { public function Matrix_createGradientBox() { var myMatrix:Matrix = new Matrix(); trace(myMatrix.toString()); // (a=1, b=0, c=0, d=1, tx=0, ty=0) myMatrix.createGradientBox(200, 200, 0, 50, 50); trace(myMatrix.toString()); // (a=0.1220703125, b=0, c=0, d=0.1220703125, tx=150, ty=150) var colors:Array = [0xFF0000, 0x0000FF]; var alphas:Array = [100, 100]; var ratios:Array = [0, 0xFF]; this.graphics.beginGradientFill(GradientType.LINEAR, colors, alphas, ratios, myMatrix); this.graphics.drawRect(0, 0, 300, 200); } } }
deltaTransformPoint | () | метод |
public function deltaTransformPoint(point:Point):Point
Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Для точки в пространстве координат до преобразования возвращает ее координаты после преобразования. В отличие от стандартного преобразования, применяемого с помощью метода transformPoint()
, в преобразовании методом deltaTransformPoint()
не учитываются параметры перемещения tx
и ty
.
Параметры
point:Point — Точка, для которой необходимо получить результат преобразования матрицы.
|
Point — Точка, полученная в результате применения преобразования матрицы.
|
identity | () | метод |
public function identity():void
Версия продукта: | Lite 2.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Задает каждому свойству матрицы значение, приводящее к нулевому преобразованию. Объект, преобразованный с применением единичной матрицы, идентичен исходному объекту.
После вызова метода identity()
в получившейся в результате матрице записаны следующие свойства: a
=1, b
=0, c
=0, d
=1, tx
=0, ty
=0.
В матричном представлении единичная матрица имеет следующий вид:
invert | () | метод |
public function invert():void
Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Выполняет обратное преобразование исходной матрицы. Можно применить обратную матрицу к объекту для отмены преобразования, выполненного при применении исходной матрицы.
halfScaleMatrix
с помощью вызова метода invert()
объекта doubleScaleMatrix
. Также показано, что две матрицы являются обратными по отношению друг к другу — матрицы, которые отменяют все преобразования, выполненные противоположной матрицей — путем создания объекта originalAndInverseMatrix
, который равен объекту noScaleMatrix
.
package { import flash.display.Shape; import flash.display.Sprite; import flash.geom.Matrix; import flash.geom.Transform; public class Matrix_invert extends Sprite { public function Matrix_invert() { var rect0:Shape = createRectangle(20, 80, 0xFF0000); var rect1:Shape = createRectangle(20, 80, 0x00FF00); var rect2:Shape = createRectangle(20, 80, 0x0000FF); var rect3:Shape = createRectangle(20, 80, 0x000000); var trans0:Transform = new Transform(rect0); var trans1:Transform = new Transform(rect1); var trans2:Transform = new Transform(rect2); var trans3:Transform = new Transform(rect3); var doubleScaleMatrix:Matrix = new Matrix(2, 0, 0, 2, 0, 0); trans0.matrix = doubleScaleMatrix; trace(doubleScaleMatrix.toString()); // (a=2, b=0, c=0, d=2, tx=0, ty=0) var noScaleMatrix:Matrix = new Matrix(1, 0, 0, 1, 0, 0); trans1.matrix = noScaleMatrix; rect1.x = 50; trace(noScaleMatrix.toString()); // (a=1, b=0, c=0, d=1, tx=0, ty=0) var halfScaleMatrix:Matrix = doubleScaleMatrix.clone(); halfScaleMatrix.invert(); trans2.matrix = halfScaleMatrix; rect2.x = 100; trace(halfScaleMatrix.toString()); // (a=0.5, b=0, c=0, d=0.5, tx=0, ty=0) var originalAndInverseMatrix:Matrix = doubleScaleMatrix.clone(); originalAndInverseMatrix.concat(halfScaleMatrix); trans3.matrix = originalAndInverseMatrix; rect3.x = 150; trace(originalAndInverseMatrix.toString()); // (a=1, b=0, c=0, d=1, tx=0, ty=0) } public function createRectangle(w:Number, h:Number, color:Number):Shape { var rect:Shape = new Shape(); rect.graphics.beginFill(color); rect.graphics.drawRect(0, 0, w, h); addChild(rect); return rect; } } }
rotate | () | метод |
public function rotate(angle:Number):void
Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Применяет преобразование поворотом к объекту Matrix.
Метод rotate()
изменяет свойства a
, b
, c
и d
объекта Matrix. В матричном представлении это действие равнозначно сцеплению текущей матрицы со следующими значениями:
Параметры
angle:Number — Угол поворота (в радианах).
|
scale | () | метод |
public function scale(sx:Number, sy:Number):void
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Применяет преобразование масштабированием к объекту Matrix. Ось x умножается на значение sx
, а ось y — на значение sy
.
Метод scale()
изменяет свойства a
и d
объекта Matrix. В матричном представлении это действие равнозначно сцеплению текущей матрицы со следующей матрицей:
Параметры
sx:Number — Коэффициент, используемый для масштабирования объекта вдоль оси x.
| |
sy:Number — Коэффициент, используемый для масштабирования объекта вдоль оси y.
|
toString | () | метод |
public function toString():String
Язык версии : | ActionScript 3.0 |
Версия продукта: | Lite 2.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Возвращает текстовое значение, содержащее список свойств объекта Matrix.
ВозвращаетString — Строка со значениями свойств объекта Matrix: a , b , c , d , tx и ty .
|
transformPoint | () | метод |
public function transformPoint(point:Point):Point
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Возвращает результат применения геометрического преобразования, представленного объектом Matrix в заданной точке.
Параметры
point:Point — Точка, для которой необходимо получить результат преобразования объекта Matrix.
|
Point — Точка, полученная в результате применения преобразования объекта Matrix.
|
translate | () | метод |
public function translate(dx:Number, dy:Number):void
Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Перемещает матрицу вдоль осей x и y, как задано параметрами dx
и dy
.
Параметры
dx:Number — Значение перемещения вправо по оси x (в пикселах).
| |
dy:Number — Значение перемещения вниз по оси y (в пикселах).
|
MatrixExample
для создания большого квадрата с градиентной заливкой. Это можно сделать, выполнив следующие действия:
myMatrix
и используется метод trace()
для вывода значений свойств по умолчанию для объекта myMatrix
.createGradientBox()
с параметрами width
и height
, равными 200 пикселам, отсутствием вращения и расстоянием для перемещения вдоль осей x и y, равным 50 пикселам.myMatrix
для отображения изменения после вызова метода createGradientBox()
.colors
: задает плавные цветовые переходы — от сплошного красного до сплошного синего.alphas
: задает непрозрачность сплошной заливки.ratios
: задает распределение цветов, равное для красного и синего цветов.beginGradientFill()
, который обрабатывает объект myMatrix
и вызывает метод lineTo()
, после выполнения которого создается прямоугольник с градиентной заливкой.package { import flash.geom.Matrix; import flash.display.Sprite; import flash.display.GradientType; public class MatrixExample extends Sprite { public function MatrixExample() { var myMatrix:Matrix = new Matrix(); trace(myMatrix.toString()); // (a=1, b=0, c=0, d=1, tx=0, ty=0) myMatrix.createGradientBox(200, 200, 0, 50, 50); trace(myMatrix.toString()); // (a=0.1220703125, b=0, c=0, d=0.1220703125, tx=150, ty=150) var colors:Array = [0xFF0000, 0x0000FF]; var alphas:Array = [100, 100]; var ratios:Array = [0, 0xFF]; graphics.beginGradientFill(GradientType.LINEAR, colors, alphas, ratios, myMatrix); graphics.lineTo(0, 300); graphics.lineTo(300, 300); graphics.lineTo(300, 0); graphics.lineTo(0, 0); } } }