# AABB

*Axis-Aligned Bounding Boxes*

## Introduction

## Installation

```
npm install aabb
```

## Usage

## Examples

TODO

## APIs

### AABB

#### constructor `(min = [0,0,0], max = [0,0,0])`

`min`

the minimum coordinates of the AABB. In a 2-D AABB in screen space, the coordinates for the upper-left corner.

`max`

the maximum coordinates of the AABB. In a 2-D AABB in screen space, the coordinates for the lower-right corner.

Constructs a new AABB of dimensionality equal to `min.length`

using the specified bounds.

*NOTE* The number of elements in `min`

and `max`

(ie. the dimensions) must be the same.

#### getLength `(axis)`

`axis`

the zero-based array index representing a particular axis. By convention, 0 = x, 1 = y, 2 = z, and so on.

Returns the length of the AABB along the side defined by `axis`

.

#### getLengths `()`

Returns an array containing the lengths of all sides of the AABB.

#### expandByAABB `(otherAABB)`

Expand `this`

to contain `otherAABB`

.

#### expandToContainElements `(elements, startAt = 0)`

`elements`

an array of elements.

`startAt`

offset into the `elments`

which to start at.

Expand `this`

to contain all `elements`

.

#### makeToContainElements `(elements)`

`elements`

an array of elements.

Return a new AABB that contains the bounds of all `elements`

.

#### overlaps `(otherAABB)`

Returns `true`

if `this`

and `otherAABB`

overlap each other.

#### contains `(otherAABB)`

Returns `true`

if `this`

completely contains `otherAABB`

.

#### contained `(otherAABB)`

Returns `true`

if `this`

is completely contained by `otherAABB`

.

#### getSurfaceArea `()`

Returns the surface area of the AABB. In the 2 dimension case, this is the AABB's perimeter.

#### getVolume `()`

Returns the volume of the AABB. In the 2 dimension case, this is the AABB's area.

#### clone `()`

Returns a clone of `this`

.

#### intersectWithRay `(ray)`

`ray`

a ray to test against.

Returns `false`

is no intersection is possible. Otherwise, returns the portion of the ray (a ray segment) that results from the intersection of the ray with the AABB.

#### intersectWithSegment `(rs)`

`rs`

- a ray segment to test against.

Returns `false`

is no intersection is possible. Otherwise, returns the portion of the ray segment that results from the intersection of the ray segment with the AABB.