# Matrix3

A class representing a 3x3 matrix.

## Code Example

``` const m = new Matrix3(); ```

## A Note on Row-Major and Column-Major Ordering

The set() method takes arguments in row-major order, while internally they are stored in the elements array in column-major order.

This means that calling

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

will result in the elements array containing:

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

and internally all calculations are performed using column-major ordering. However, as the actual ordering makes no difference mathematically and most people are used to thinking about matrices in row-major order, the Verge3D documentation shows matrices in row-major order. Just bear in mind that if you are reading the source code, you'll have to take the transpose of any matrices outlined here to make sense of the calculations.

## Constructor

### Matrix3()

Creates and initializes the Matrix3 to the 3x3 identity matrix.

## Properties

### # .elements : Array

A column-major list of matrix values.

## Methods

### # .clone() → Matrix3

Creates a new Matrix3 and with identical elements to this one.

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

Copies the elements of matrix m into this matrix.

### # .determinant() → Float

Computes and returns the determinant of this matrix.

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

Return true if this matrix and m are equal.

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

Extracts the basis of this matrix into the three axis vectors provided. If this matrix is:

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

then the xAxis, yAxis, zAxis will be set to:

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

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

array — the array to read the elements from.
offset — (optional) index of first element in the array. Default is `0`.

Sets the elements of this matrix based on an array in column-major format.

### # .invert() → this

Inverts this matrix, using the analytic method.

You can not invert with a determinant of zero. If you attempt this, the method produces a zero matrix instead.

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

m — 4x4 matrix.

Sets this matrix as the upper left 3x3 of the normal matrix of the passed 4x4 matrix. The normal matrix is the inverse transpose of the matrix m.

### # .identity() → this

Resets this matrix to the 3x3 identity matrix:

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

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

theta — Rotation angle in radians. Positive values rotate counterclockwise.

Sets this matrix as a 2D rotational transformation by theta radians. The resulting matrix will be:

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

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

x — the amount to scale in the X axis.
y — the amount to scale in the Y axis.

Sets this matrix as a 2D scale transform:

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

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

x — the amount to translate in the X axis.
y — the amount to translate in the Y axis.

Sets this matrix as a 2D translation transform:

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

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

Post-multiplies this matrix by m.

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

Sets this matrix to a x b.

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

Multiplies every component of the matrix by the scalar value s.

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

Rotates this matrix by the given angle (in radians).

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

Scales this matrix with the given scalar values.

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

n11 — value to put in row 1, col 1.
n12 — value to put in row 1, col 2.
...
...
n32 — value to put in row 3, col 2.
n33 — value to put in row 3, col 3.

Sets the 3x3 matrix values to the given row-major sequence of values.

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

Pre-multiplies this matrix by m.

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

Set this matrix to the upper 3x3 matrix of the Matrix4 m.

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

tx — offset x.
ty — offset y.
sx — repeat x.
sy — repeat y.
rotation — rotation, in radians. Positive values rotate counterclockwise.
cx — center x of rotation.
cy — center y of rotation.

Sets the UV transform matrix from offset, repeat, rotation, and center.

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

array — (optional) array to store the resulting vector in. If not given a new array will be created.
offset — (optional) offset in the array at which to put the result.

Writes the elements of this matrix to an array in column-major format.

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

Translates this matrix by the given scalar values.

### # .transpose() → this

Transposes this matrix in place.

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

array — array to store the resulting vector in.

Transposes this matrix into the supplied array, and returns itself unchanged.

## Source

For more info on how to obtain the source code of this module see this page.