1.0.0 • Published 9 years ago

compute-rot90 v1.0.0

Weekly downloads
3
License
MIT
Repository
github
Last release
9 years ago

rot90

NPM version Build Status Coverage Status Dependencies

Rotates a matrix by 90 degrees.

Installation

$ npm install compute-rot90

For use in the browser, use browserify.

Usage

var rot90 = require( 'compute-rot90' );

rot90( x, opts )

Rotates a matrix by 90 degrees in the counterclockwise direction.

var matrix = require( 'dstructs-matrix' );

var data = new Float32Array( 6 );
for ( var i = 0; i < data.length; i++ ) {
	data[ i ] = i;
}
var mat = matrix( data, [3,2], 'float32' );
/*
	[ 0 1
	  2 3 
	  4 5 ]
*/

var out = rot90( mat );
/*
	[ 1 3 5
	  0 2 4 ]
*/

The function accepts the following options:

  • k: number of times to rotate a matrix by 90 degrees. Default: 1.
  • copy: boolean indicating whether to return a new matrix. Default: true.

To rotate a matrix multiple times, set the k option.

// Rotate the matrix 3 times...
var out = rot90( mat, {
	'k': 3
});
/*
	[ 4 2 0
	  5 3 1 ]
*/

k may also be negative and thus specify that the matrix be rotated in a clockwise direction.

var out = rot90( mat, {
	'k': -2
});
/*
	[ 5 4
	  3 2
	  1 0 ]
*/

By default, the function returns a new matrix instance. To mutate the input matrix, set the copy option to false.

var out = rot90( mat, {
	'copy': false
});
/*
	[ 1 3 5
	  0 2 4 ]
*/

var bool = ( mat === out );
// returns true

Examples

var matrix = require( 'dstructs-matrix' ),
	rot90 = require( 'compute-rot90' );

var nRows = 3,
	nCols = 2,
	mat,
	out,
	i, j;

mat = matrix( [nRows,nCols], 'int32' );
for ( i = 0; i < nRows; i++ ) {
	for ( j = 0; j < nCols; j++ ) {
		mat.set( i, j, i*nCols + j );
	}
}
/*
	[ 0 1
	  2 3
	  4 5 ]
*/

// Rotate the matrix 90 degrees...
out = rot90( mat );
/*
	[ 1 3 5
	  0 2 4 ]
*/

// Rotate the matrix 180 degrees...
out = rot90( mat, {
	'k': 2
});
/*
	[ 5 4
	  3 2
	  1 0 ]
*/

// Rotate the matrix 270 degrees...
out = rot90( mat, {
	'k': 3
});
/*
	[ 4 2 0
	  5 3 1 ]
*/

// Rotate the matrix 360 degrees...
out = rot90( mat, {
	'k': 4
});
/*
	[ 0 1
	  2 3
	  4 5 ]
*/

// Rotate the matrix -90 (equiv to +270) degrees...
out = rot90( mat, {
	'k': -1
});
/*
	[ 4 2 0
	  5 3 1 ]
*/

// Rotate the matrix -180 (equiv to +180) degrees and mutate...
out = rot90( mat, {
	'copy': false,
	'k': -2
});
/*
	[ 5 4
	  3 2
	  1 0 ]
*/

To run the example code from the top-level application directory,

$ node ./examples/index.js

Tests

Unit

Unit tests use the Mocha test framework with Chai assertions. To run the tests, execute the following command in the top-level application directory:

$ make test

All new feature development should have corresponding unit tests to validate correct functionality.

Test Coverage

This repository uses Istanbul as its code coverage tool. To generate a test coverage report, execute the following command in the top-level application directory:

$ make test-cov

Istanbul creates a ./reports/coverage directory. To access an HTML version of the report,

$ make view-cov

License

MIT license.

Copyright

Copyright © 2015. The Compute.io Authors.