Matrix3 - Руководство по Вердж3Д - Софт Эйт Софт
Description: Узнайте как использовать Matrix3 в интерактивных 3Д-веб-приложениях сделанных на Вердж3Д

# Matrix3

Класс, определяющий матрицу 3x3.

## Пример

`const m = new Matrix3();`

## Замечание о порядке следования строк и столбцов

Метод set() принимает аргументы в порядке row-major, а внутренне они хранятся в массиве elements в порядке колонок.

Это означает, что вызов:

`m.set(11, 12, 13, 21, 22, 23, 31, 32, 33);`

приведет к созданию массива elements, содержащего:

`m.elements = [11, 21, 31, 12, 22, 32, 13, 23, 33];`

и внутри все вычисления выполняются с использованием упорядочивания по столбцам. Однако, поскольку фактический порядок не имеет математического значения, а большинство людей привыкли думать о матрицах в порядке возрастания строк, в документации Verge3D матрицы показаны в порядке возрастания строк. Просто имейте в виду, что если вы читаете исходный код, вам придется изучить transpose любых матриц, описанных здесь, чтобы понять смысл вычислений.

## Конструктор

### Matrix3()

Создает и инициализирует матрицу Matrix3 в единичную матрицу 3x3.

## Свойства

### # .elements : Array

Список column-major значений матрицы.

## Методы

### # .clone() → Matrix3

Создает новую матрицу Matrix3 и с элементами, идентичными данной матрице.

### # .copy(m : Matrix3) → this

Копирует элементы матрицы m в данную матрицу.

### # .determinant() → Float

Вычисляет и возвращает определитель данной матрицы.

### # .equals(m : Matrix3) → Boolean

Возвращает `true`, если эта матрица и m равны.

### # .extractBasis(xAxis : Vector3, yAxis : Vector3, zAxis : Vector3) → this

Извлекает базис текущей матрицы в три предоставленных осевых вектора. Если текущая матрица является:

`a, b, c, d, e, f, g, h, i`

то для xAxis, yAxis, zAxis будут установлены значения:

`xAxis = (a, d, g) yAxis = (b, e, h) zAxis = (c, f, i)`

### # .fromArray(array : Array, offset : Integer) → this

- array — массив для чтения элементов из него.
- offset — (необ.) индекс первого элемента в массиве. По умолчанию равен `0`.

Устанавливает элементы этой матрицы на основе массива в формате column-major.

### # .invert() → this

Инвертирует текущую матрицу, используя аналитический метод.

Вы не можете инвертировать матрицу с детерминантом, равным нулю. Если вы попытаетесь это сделать, метод выдаст нулевую матрицу.

### # .getNormalMatrix(m : Matrix4) → this

m — Matrix4.

Устанавливает левую верхнюю часть 3x3 текущей матрицы как нормальную матрицу на основе переданной матрицы. Нормальная матрица является инвертированным транспонированием матрицы m.

### # .identity() → this

Сбрасывает текущую матрицу в единичную 3x3:

`1, 0, 0 0, 1, 0 0, 0, 1`

### # .makeRotation(theta : Float) → this

theta — угол поворота в радианах. Положительные значения вращают против часовой стрелки.

Устанавливает 2Д-поворот в текущей матрице на theta радиан. Результирующая матрица будет иметь вид:

`cos(θ) -sin(θ) 0 sin(θ) cos(θ) 0 0 0 1`

### # .makeScale(x : Float, y : Float) → this

- x — масштабирование вдоль оси X.
- y — масштабирование вдоль оси Y.

Устанавливает 2Д-масштабирование в текущей матрице:

`x, 0, 0, 0, y, 0, 0, 0, 1`

### # .makeTranslation(x : Float, y : Float) → this

- x — перемещение по оси X.
- y — перемещение по оси Y.

Устанавливает 2Д-перемещение в текущей матрице:

`1, 0, x, 0, 1, y, 0, 0, 1`

### # .multiply(m : Matrix3) → this

Умножает текущую матрицу на m справа.

### # .multiplyMatrices(a : Matrix3, b : Matrix3) → this

Устанавливает текущую матрицу в a x b.

### # .multiplyScalar(s : Float) → this

Умножает каждый компонент матрицы на скалярное значение `s`.

### # .rotate(theta : Float) → this

Поворачивает матрицу на указанный угол в радианах.

### # .scale(sx : Float, sy : Float) → this

Масштабирует матрицу на указанные значения.

### # .set(n11 : Float, n12 : Float, n13 : Float, n21 : Float, n22 : Float, n23 : Float, n31 : Float, n32 : Float, n33 : Float) → this

- n11 — значение, которое нужно поместить в строку 1, столбец 1.
- n12 — значение, которое нужно поместить в строку 1, столбец 2.
- ...
- ...
- n32 — значение, которое нужно поместить в строку 3, столбец 2.
- n33 — значение, которое нужно поместить в строку 3, столбец 3.

Устанавливает матрицу 3x3 с использованием указанной последовательности row-major значений.

### # .premultiply(m : Matrix3) → this

Умножает текущую матрицу на m слева.

### # .setFromMatrix4(m : Matrix4) → this

Устанавливает текущую матрицу в верхнюю левую 3x3 часть матрицы m.

### # .setUvTransform(tx : Float, ty : Float, sx : Float, sy : Float, rotation : Float, cx : Float, cy : Float) → this

- tx — смещение x.
- ty — смещение y.
- sx — повтор x.
- sy — повтор y.
- rotation — вращение (в радианах). Положительные значения вращают против часовой стрелки.
- cx — центр x вращения.
- cy — центр y вращения.

Устанавливает матрицу трансформации UV из смещения, повтора, вращения и центра.

### # .toArray(array : Array, offset : Integer) → Array

- array — (необ.) массив для хранения результирующего вектора. Если не указан, будет создан новый массив.
- offset — (необ.) смещение в массиве, на которое следует поместить результат.

Записывает элементы данной матрицы в массив в формате column-major.

### # .translate(tx : Float, ty : Float) → this

Перемещает матрицу на указанные скалярные значения.

### # .transpose() → this

Транспонирует текущую матрицу.

### # .transposeIntoArray(array : Array) → this

array — массив для хранения результирующей матрицы.

Транспонирует текущую матрицу в заданный массив и возвращает её без изменений.

## Исходный файл

О том как получить исходный код этого модуля читайте тут.