# math

Cell provides three math modules with identical functions but different angle representations:

```javascript
var math = use('math/radians')  // angles in radians
var math = use('math/degrees')  // angles in degrees  
var math = use('math/cycles')   // angles in cycles (0-1)
```

## Trigonometry

### sine(angle)

```javascript
math.sine(math.pi / 2)  // 1 (radians)
math.sine(90)           // 1 (degrees)
math.sine(0.25)         // 1 (cycles)
```

### cosine(angle)

```javascript
math.cosine(0)  // 1
```

### tangent(angle)

```javascript
math.tangent(math.pi / 4)  // 1 (radians)
```

### arc_sine(n)

Inverse sine.

```javascript
math.arc_sine(1)  // π/2 (radians)
```

### arc_cosine(n)

Inverse cosine.

```javascript
math.arc_cosine(0)  // π/2 (radians)
```

### arc_tangent(n, denominator)

Inverse tangent. With two arguments, computes atan2.

```javascript
math.arc_tangent(1)        // π/4 (radians)
math.arc_tangent(1, 1)     // π/4 (radians)
math.arc_tangent(-1, -1)   // -3π/4 (radians)
```

## Exponentials and Logarithms

### e(power)

Euler's number raised to a power. Default power is 1.

```javascript
math.e()     // 2.718281828...
math.e(2)    // e²
```

### ln(n)

Natural logarithm (base e).

```javascript
math.ln(math.e())  // 1
```

### log(n)

Base 10 logarithm.

```javascript
math.log(100)  // 2
```

### log2(n)

Base 2 logarithm.

```javascript
math.log2(8)  // 3
```

## Powers and Roots

### power(base, exponent)

```javascript
math.power(2, 10)  // 1024
```

### sqrt(n)

Square root.

```javascript
math.sqrt(16)  // 4
```

### root(radicand, n)

Nth root.

```javascript
math.root(27, 3)  // 3 (cube root)
```

## Constants

Available in the radians module:

```javascript
math.pi   // 3.14159...
math.e()  // 2.71828...
```

## Example

```javascript
var math = use('math/radians')

// Distance between two points
function distance(x1, y1, x2, y2) {
  var dx = x2 - x1
  var dy = y2 - y1
  return math.sqrt(dx * dx + dy * dy)
}

// Angle between two points
function angle(x1, y1, x2, y2) {
  return math.arc_tangent(y2 - y1, x2 - x1)
}

// Rotate a point
function rotate(x, y, angle) {
  var c = math.cosine(angle)
  var s = math.sine(angle)
  return {
    x: x * c - y * s,
    y: x * s + y * c
  }
}
```
