npm package: @omjs/matrix2d
Description: CSS tranform-2D matrix
Author: oyzhen
Latest version: 1.0.1

# Matrix2D

A class derived from [@omjs/iterable](https://git.coding.net/oyzhen/iterable.git) for describing css 2D-transformation, which is featured by `ECMAScript 2015` and `Immutable`, where a [polyfill](https://cdn.polyfill.io) for `Symbol` is needed for old browsers.

*   Now version: 1.0.0

*   Publish date: 2018.06.08

[Source Code 👉](https://git.coding.net/oyzhen/matrix2d.git)

## INSTALL

### npm

```
npm i @omjs/matrix2d
```

### browser

```html
<script src="https://cdn.polyfill.io/v2/polyfill.min.js"></script>
<script src="node_modules/@omjs/matrix2d/dist/matrix2D.min.js"></script>
```

## USAGE

```javascript
import { Matrix2D } from '@omjs/matrix2d';
```

## QUICK START

```javascript
import { Matrix2D, lmul } from '@omjs/matrix2d';
let mat1 = new Matrix2D(1, 0, 0, 1, 0, 0); // constructor => matrix(1,0,0,1,0,0)
// using babel-plugin-transform-function-bind
let mat2 = mat1::lmul([-1, 0, 0, -1, 0, 0]); // matrix muliply => matrix(-1,0,0,-1,0,0)
mat2.toString(); // => matrix(-1,0,0,-1,0,0)
```

## LICENCE

[MIT 👉]('./LICENSE')

---

# APIs

## Contructor

Serveral Numbers, Number Arrays or Strings are allowed to create a Matrix2D Object.

### `Matrix2D([a=1],[b=0],[c=0],[d=1],[tx=0],[ty=0])`

### `Matrix2D([array, [...]])`

### `Matrix2D([string, [...]])`

e.g.

```javascript
let mat1 = new Matrix2D(); // matrix(1,0,0,1,0,0)
let mat2 = new Matrix2D(1, 0, 0, 1, 0, 0); // matrix(1,0,0,1,0,0)
let mat3 = new Matrix2D([1, 0, 0, 1, 0, 0]); // matrix(1,0,0,1)
let mat4 = new Matrix2D('matrix(1,0,0,1,0,0)'); // matrix(1,0,0,1,0,0)
let mat5 = new Matrix2D(mat1); // matrix(1,0,0,1,0,0)
```

## Static Properties

### `Matrix2D.MUL_DIR`

The direction of multiply.

*   Matrix2D.MUL_DIR.L - left
*   Matrix2D.MUL_DIR.R - Right

### `Matrix2D.ROTATE_DIR`

The direction of rotate.

*   Matrix2D.ROTATE_DIR.CW - clockwise
*   Matrix2D.ROTATE_DIR.ACW - anticlockwise

### `version`: `string`

The code version, current version is 1.0.0;

## Properties

### `[]`

Get the matrix's data by index.

e.g.

```javascript
let mat = new Matrix2D();
mat[0]; // 1
mat[1]; // 0
mat[2]; // 0
mat[3]; // 1
mat[4]; // 0
mat[5]; // 0
```

## Static Methods

### `Matrix2D.isMatrix2D(obj: any)` => `boolean`

Check whether the obj's type is matrix2d or not;

e.g.

```javascript
let mat = new Matrix2D(1, 0, 0, 1, 0, 0);
Matrix2D.isMatrix2D(mat); // true
Matrix2D.isMatrix2D([1, 0, 0, 1, 0, 0]); // false
```

## Methods

### `toString()` => `string`

Convert to string.

e.g.

```javascript
let mat = new Matrix2D(1, 0, 0, 1, 0, 0);
mat.toString(); // matrix(1,0,0,1,0,0)
```

### `valueOf()` => `Array(6)`

Get the value of matrix2d object

e.g.

```javascript
let mat = new Matrix2D();
mat.valueOf(); // [1,0,0,1,0,0]
```

### `clone()` => `Matrix2D`

Get a deep clone.

e.g.

```javascript
let mat = new Matrix2D();
mat.clone(); // matrix(1,0,0,1,0,0);
mat == mat.clone(); // false
```

## Operations

### `lmul(mat: Matrix2D | Array)` => `Matrix2D`

Pre-multiplied by given matrix, and return a new Matrix2D, used to compose transformation.

e.g.

```javascript
let mat = new Matrix2d();
mat::lmul([-1, 0, 0, -1, 0, 0]); // matrix(-1,0,0,-1,0,0)
```

### `rmul(mat: Matrix2D | Array)` => `Matrix2D`

Post-multiplied by given matrix, and return a new Matrix2D, used to compose transformation.

e.g.

```javascript
let mat = new Matrix2d();
mat::rmul([-1, 0, 0, -1, 0, 0]); // matrix(-1,0,0,-1,0,0)
```

### `mul(mat: Matrix2D | Array, dir: Matrix2D.MUL_DIR)` => `Matrix2D`

Multiplied by given matrix and [direction](#`Matrix2D.MUL_DIR`), and return a new Matrix2D, used to compose transformation.

e.g.

```javascript
let mat = new Matrix2d();
mat::mul([-1, 0, 0, -1, 0, 0], Matrix2D.MUL_DIR.L); // matrix(-1,0,0,-1,0,0)
```

[Click here to read the full APIs 👉](./doc/API.md)