## README

# vector-2d

2d vector `{ x, y }`

for math / physics

## Install

```
npm install vector-es
```

## Usage

```
import Vector from 'vector-es';
const vector = new Vector(1, 2);
vector.mult(2); // { x: 2, y 4}
```

## API

### Vector

`constructor :: (Number, Number) -> Vector`

### Properties

a vector is shape of `{ x, y }`

`x`

`y`

### Static methods

All static methods are immutable.

#### operators

`add :: (Vector, Vector) -> Vector`

add two vectors

`sub :: (Vector, Vector) -> Vector`

subtract one vector from another.

`mult :: (Vector, Number) -> Vector`

multiply by scalar

`div :: (Vector, Number) -> Vector`

divide by scalar

`dot :: (Vector, Vector) -> Number`

dot product

`cross :: (Vector, Vector) -> Number`

cross product

#### evaluate

`mag :: Vector -> Number`

the magnitude of a vector

`magSq :: Vector -> Number`

the square of the magnitude

`dir :: Vector -> Number`

the direction of a vector

`dist :: (Vector, Vector) -> Number`

the distance between two vectors

`distSq :: (Vector, Vector) -> Number`

the square of the distance between two vectors

`angle :: (Vector, Vector) -> Number`

the angle between two vectors, range [0, PI]

#### create

`create :: (Number, Number) -> Vector`

create a vector by rectangular form

`fromAngle :: (Number, Number) -> Vector`

create a vector by angle

`normalize :: Vector -> Vector`

normalize the vector to a length of 1

`clone :: Vector -> Vector`

create a new vector copy

### Instance methods

All instance methods are very similar to the statics. there're two differences.

`first argument`

instance methods don't need first argument, it's itself.

`mutable`

most of methods are mutable.

#### operators

`add :: Vector -> Vector`

adds a vector

`sub :: Vector -> Vector`

subtract from another vector

`mult :: Number -> Vector`

multiply a vector by a scalar

`div :: Number -> Vector`

divide a vector by a scalar

`dot :: Vector -> Number`

dot product

`cross :: Vector -> Number`

cross product

#### evaluate

`mag :: () -> Number`

the magnitude of a vector

`magSq :: () -> Number`

the square of the magnitude

`dir :: () -> Number`

the direction of a vector

`dist :: Vector -> Number`

the distance between two vectors

`distSq :: Vector -> Number`

the square of the distance between two vectors

`angle :: Vector -> Number`

the angle between two vectors, range [0, PI]

#### create

`clone :: () -> Vector`

create a vector copy, this's an immutable method

`normalize :: () -> Vector`

create a unit vector

#### manipulate

`set :: (Number, Number) -> Vector`

set x, y of this vector

`setX :: Number -> Vector`

set x of this vector

`setY :: Number -> Vector`

set y of this vector

`setMag :: Number -> Vector`

set the magnitude of this vector

`limit :: Number -> Vector`

limit the magnitude of this vector