## README

# VectorJs

A 2D Vector class for JavaScript. That's it!

## Installation

`$ npm install vectorjs`

### Building

`$ npm run build`

`$ npm run test`

## Usage

```
var Vector = require('vectorjs');
var a = new Vector(2, 2);
var b = new Vector(5, 3);
var ab = a.add(b);
console.log(ab);
// => { x: 7, y: 5 }
```

Usage without `new`

is also supported

```
var a = new Vector(2, 2);
// works the same as
var a = Vector(2, 2);
```

### Methods

None of the methods are mutable, which means that they wont modify the caller, but rather return a new `Vector`

#### .add(amount): Vector

Returns the vector sum of the two vectors

`amount`

can be either a `Number`

or a `Vector`

#### .sub(amount): Vector

Returns caller subtracted by the amount

`amount`

can be either a `Number`

or a `Vector`

#### .mul(amount): Vector

Returns the result of caller multiplied by the amount

`amount`

being either a `Number`

or a `Vector`

#### .div(amount): Vector

Returns the result of caller divided by the amount

`amount`

being either a `Number`

or a `Vector`

#### .len(): Number

Returns the length of the Vector. Alternatively use .lenSq()

#### .lenSq(): Number

Returns the squared length of the Vector. Useful for comparing two vectors

#### .normalize(): Vector

Returns the normal of the Vector. This is a unit sized Vector

#### .angle(other): Number

Returns the angle between calle and `other`

in degrees. Alias for `.angleDeg()`

`other`

being the other vector

#### .angleDeg(other): Number

Returns the angle between calle and `other`

in degrees. Returns the same as `.angle()`

`other`

being the other vector

#### .angleRad(other): Number

Returns the angle between calle and `other`

in radian.

`other`

being the other vector

#### .clone(): Vector

Returns the a copy or clone of the vector

#### .equals(other): Boolean

Returns whether the `x`

and `y`

of the vectors are the same.

This is here since JavaScript is weird and doesn't do.

```
{ x: 2, y: 3 } === { x: 2, y: 3 }
// => false
Vector.equals({ x: 2, y: 3 }, { x: 2, y: 3 })
// => true
```

They have their reasons.

`other`

being the other vector

All of these functions can also be called from the class it self, as shown below.

```
a.add(b) <=> Vector.add(a, b)
a.len() <=> Vector.len(a)
// etc...
```

## Motivation

In the past weeks, I've wrote multiple vector classes for every single one of my games, each with a different implementation. I needed something that was as simple as `v(2, 1).add(3)`

and was easy to install. If you're looking for a super high performance vector library for rendering thousands of particles, this one might not be the one. Although if you do, send it to me please!

## Misconceptions

The source it self is written in `ES6`

, but is transpiled to pure `ES5`

and is ready to be required and used without a precompiler nor transpiler.

## Contributing

- Fork it!
- Create your feature branch:
`git checkout -b my-new-feature`

- Commit your changes:
`git commit -am 'Add some feature'`

- Push to the branch:
`git push origin my-new-feature`

- Submit a pull request :D

## Credits

Thanks to timoxley for supporting me with a wrapper for class to factory.

Thanks to Tribuadore on reddit for pointing out this wasn't a "propper" "libary", but rather just a class.

## License

The MIT License (MIT)