@atirip/matrix

1.0.0 • Public • Published

Matrix

General purpose, low garbage affine matrix library.

Why?

I needed separate (no dependencies), minimal matrix library that is garbage friendly and can be called extensively (as in Javascript animations).

Install

$ npm install @atirip/matrix

Or clone this repo.

Usage

#####Standard browser use

<script src="matrix.js"></script>
<script>
	var matrix = new atirip.Matrix();
</script>
  • no minfied version is supplied
  • it attaches itself in 'atirip' namespace

#####AMD

require(["matrix"], function(Matrix) {
  // ...
});

#####In nodejs/browserify

var Matrix = require("@atirip/matrix");

API

#####Create matrix:

var matrix = new Matrix(); // creates identity matrix
var matrix = new Matrix(1, 2, 3, 4, 5, 6);
var matrix = new Matrix(5, 6); // equals new Matrix(1, 0, 0, 1, 5, 6)
var matrix = new Matrix( new Matrix() ); // clone

You may omit new.

#####Do some simple stuff with it:
As a general principle - this Matrix is always changed!

matrix.rotate(45); // in degrees
matrix.scale(2); // in unoform
matrix.scale(2, 3);
matrix.translate(100, 50);

Complex transform:

matrix.transform(originX, originY, angle, sx, sy, x, y);

Scale, rotate matrix over specified origin, then translate. This is how one implements gesture based zoom/rotate/translate in iOS webapp for example.

#####Static utility functions:

Matrix.transformPoint(matrix, x, y /*, result*/);
Matrix.transformPointReverse(matrix, x, y /*, result*/);
Matrix.decompose(decomposed);
Matrix.compose(matrix /*, result*);
Matrix.copy(from, to);

If you pass result object, it is used, if not, new is created. That avoids creating garbage in loops.

##Test

$ npm test

License

Copyright © 2015 Priit Pirita, released under the MIT license.

Readme

Keywords

Package Sidebar

Install

npm i @atirip/matrix

Weekly Downloads

1

Version

1.0.0

License

MIT

Last publish

Collaborators

  • atirip