radialindex
compute radial order indices from unordered Cartesian coordinates relative to the origin or a specified point
npm install radialindex
Want to see pretty graphs? Log in now!
6  downloads in the last month 
Last Published By  

Maintainers  
Version  0.1.2 last updated a year ago 
License  MIT 
Keywords  coordinate, radian, arctan 
Repository  https://github.com/AgileDiagnosis/radialindex (git) 
Dependencies  lodash 
Starred by  agilediagnosis, jden 
radialindex
Compute radial order indices from unordered Cartesian coordinates relative to the origin or a specified point.
Install
npm install radialindex
Basic usage
$ var ri = require('radialindex')
$ var points = [
[10, 26],
[11, 18],
[11, 27]
];
$ console.log(ri.getIndicesFromPoints(points));
[1, 2, 0]
Note that the response array provides the indices in the same sequence as the original points argument.
Options
getIndicesFromPoints
optionally takes a configuration object as its second argument. That configuration object provides three additional parameters to getIndicesFromPoints
.
{
center: Array. Format: [x, y]. Set the coordinate around which the radial indexing will occur.
ccw: Boolean. (Any truthy value.) Compute indices with a counterclockwise rotation.
rotate: Number. From 360 to 360. The degree offset from the positive yaxis to begin the indexing rotation.
}
center
is set to the origin [0, 0] unless otherwise specified. Also by default, getIndicesFromPoints
indexes points in a clockwise fashion starting from the positive yaxis (start at the 12 o'clock position moving to the right). To override this behavior and rotate in a counterclockwise fashion, set ccw
to true
. Finally, rotate
controls the angle from which the indexing movement should beginby default, the positive yaxis. Setting rotate
to 90, for example, would start the indexing at the positive xaxis instead.
Examples
[y]
(0, 100)

 A

+ (100, 0) [x]
C 
 B

For the following examples, assume that A
= [A.x, A.y], B
= [B.x, B.y], etc. By default, getIndicesFromPoints([A, B, C])
would return [0, 1, 2]
because the indexer would start from [y] and sweep clockwise hitting A, then B, then C. That is:
$ ri.getIndicesFromPoints([A, B, C])
[0, 1, 2]
Other examples:
$ ri.getIndicesFromPoints([A, B, C], {ccw: true})
[2, 1, 0]
$ ri.getIndicesFromPoints([A, B, C], {rotate: 90})
[2, 0, 1]
$ ri.getIndicesFromPoints([A, B, C], {ccw: true, rotate: 270})
[2, 1, 0]
$ ri.getIndicesFromPoints([A, B, C], {center: [500, 500]})
[1, 2, 0]
Tests
npm test
Cautions
Calculating the radial component of a polar coordinate relies on trignometric functions that often produce extended floating point numbers. The accuracy of indexing is therefore subject to JavaScript's floating point precision limitations. For general information about floating point issues see the floating point guide.
Contributors
License
© 2013 Agile Diagnosis, Inc MIT