compute-rot90

1.0.0 • Public • Published

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.

Package Sidebar

Install

npm i compute-rot90

Weekly Downloads

2

Version

1.0.0

License

MIT

Last publish

Collaborators

  • kgryte