0.2.0 • Published 9 years ago

rg.vec2 v0.2.0

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

vec2

npm version Travis CI Badge (master branch)

A 2d vector class + vector math utilities.

How to include

Node.js / Browserify

In your shell:

$ npm install --save rg.vec2

In your javascript:

var Vec2 = require('rg.vec2')

Browser ("classic" way)

Just add a script tag with either vec2.js or vec2.min.js from this repos root directory. This makes the Vec2 variable globally available.

typeof window.Vec2
// --> 'function'

API

new Vec2(x, y)

Creates a new Vec2 object with the properties x and y.

Warning: this does not provide any error handling, so be sure that x and y are numbers!

var a = new Vec2(3, 4)

console.log(a)
// --> { x: 3, y: 4 }

Vec2#magnitude()

returns number

Returns the magnitude of this, i.e. Math.sqrt(this.x * this.x + this.y * this.y).

var a = new Vec2(3, 4)

console.log(a.magnitude())
// --> 5

Vec2#angle()

returns Number

Returns the angle of the vector in Radians. For (1, 0), this returns zero, for (0, 1) half Pi and so on.

var a = new Vec2(1, 0)
var b = new Vec2(0, 1)
var c = new Vec2(-1, 1)

console.log(a.angle())
// --> 0

console.log(b.angle())
// --> 1.5707963267948966

console.log(c.angle())
// --> 2.356194490192345

Vec2#normal()

return Vec2

Returns a (new Vec2) Normal, i.e. a vector orthogonal to this. The returned vector points to left of the original vector.

The same result is returned by Vec2#leftNormal(). If you need a Normal pointing to the right, use Vec2#rightNormal()

var a = new Vec2(4, 5)

var n = a.normal()

console.log(n)
// --> { x: -5, y: 4 }

console.log(a.leftNormal())
// --> { x: -5, y: 4 }

console.log(a.rightNormal())
// --> { x: 5, y: -4 }

// if the dot product of two vectors is zero, they're orthogonal.
console.log(n.dot(a))
// --> 0

Vec2#add(vector)

takes Vec2

returns Vec2

Adds vector to this. Returns this (for chaining).

var a = new Vec2(10, 12)
var b = new Vec2(4, 5)

a.add(b)

console.log(a)
// --> { x: 14, y: 17 }

Vec2#subtract(vector)

takes Vec2

returns Vec2

Subtracts vector from this. Returns this (for chaining).

var a = new Vec2(5, 3)
var b = new Vec2(3, 2)

a.subtract(b)

console.log(a)
// --> { x: 2, y: 1 }

Vec2#scale(number)

takes Number

returns Vec2

Multiplies x and y with number. Returns this (for chaining).

var a = new Vec2(7, 6)

a.scale(6)

console.log(a)
// --> { a: 42, b: 36 }

Vec2#dot(vector)

takes Vec2

returns Number

Calculates the dot product of this and vector.

var a = new Vector(5, 3)
var b = new Vector(-2, 4)

// a.x * b.x + a.y * b.y
console.log(a.dot(b))
// --> 2

Vec2#parallel(vector)

takes Vec2

returns Boolean

Returns true if this and vector are parallel, else false.

var a = new Vec2(5, 2)
var b = new Vec2(10, 4)
var c = new Vec2(6, 7)

console.log(a.parallel(b))
// --> true

console.log(a.parallel(c))
// --> false

Vec2#normalize()

returns Vec2

Normalizes this. This means that the direction will stay the same, but the magnitude will be 1.

var a = new Vec2(4, 5)
var b = a.copy()

b.normalize()

console.log(b.parallel(a))
// --> true

console.log(b.getMagnitude())
// --> 1

Vec2#asArray()

returns Array

Returns an array in the form [x, y].

var a = new Vec2(3, 4)

console.log(a.asArray())
// --> [ 3, 4 ]

Vec2#copy()

returns Vec2

Returns a new instance of Vec2 with the same x and y as this.

var a = new Vec2(3, 4)
var b = a.copy()

console.log(b.x === a.x, b.y === a.y)
// --> true true

console.log(b === a)
// --> false

Functions

All math-performing methods of Vec2 that return this are also available as functions in the "namespace" Vec2.

var a = new Vec2(1, 2)
var b = new Vec2(3, 4)

var c = a.copy().add(b)

// equals

var c = Vec2.add(a, b)

As you can see from the example, the main difference between these two ways is that calling Vec2.<function> returns a copy of the vector instead of doing the operation in-place.

Function available as method and namespaced function

  • add
  • subtract
  • scale
  • normalize

Vec2.fromAngle(<angle>, <length>)

takes Number, Number

returns Vec2

Returns a new vector with the angle angle (in Radians) and the length length.

var a = Vec2.fromAngle(Math.PI, 2)
var b = Vec2.fromAngle(Math.PI * (3 / 2), 42)

console.log(a.angle(), a.magnitude())
// --> 3.141592653589793, 2

console.log(b.angle(), b.magnitude())
// --> 4.71238898038469, 42

Vec2.fromArray(<array>)

takes Array

returns Vec2

Creates a new instance of Vec2 with array[0] as x and array[1] as y.

var b = Vec2.fromArray([1, 2])

console.log(b)
// --> { x: 1, y: 2 }

Testing/Building

Installing development dependencies

$ npm install

Running tests

$ npm test

Building for the browser

$ npm run build
$ # for building on file change
$ npm run watch

License

MIT license, see LICENSE.

0.2.0

9 years ago

0.1.5

9 years ago

0.1.4

9 years ago

0.1.3

9 years ago

0.1.1

9 years ago

0.1.0

9 years ago

0.0.1

9 years ago