# mat4-interpolator

> interpolates two 4x4 matrices

Latest version **1.0.3** (published 2015-02-08) · MIT license · 0 weekly downloads

## Install

```sh
npm install mat4-interpolator
pnpm add mat4-interpolator
yarn add mat4-interpolator
bun add mat4-interpolator
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.3 |
| Published | 2015-02-08 |
| First published | 2014-12-07 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 5 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 3 |
| Author | Matt DesLauriers |
| Maintainers | mattdesl |
| Keywords | animate, animation, matrix, mat4, gl-mat4, gl-matrix, matrices, decompose, recompose, tween, css, style |

## Links

- npm: https://www.npmjs.com/package/mat4-interpolator
- Repository: https://github.com/mattdesl/mat4-interpolator
- Issues: https://github.com/mattdesl/mat4-interpolator/issues
- npm.io page: https://npm.io/package/mat4-interpolator

## Dependencies (5)

- [gl-mat4](https://npm.io/package/gl-mat4.md) ^1.0.1
- [gl-vec3](https://npm.io/package/gl-vec3.md) ^1.0.2
- [quat-slerp](https://npm.io/package/quat-slerp.md) ^1.0.0
- [mat4-decompose](https://npm.io/package/mat4-decompose.md) ^1.0.1
- [mat4-recompose](https://npm.io/package/mat4-recompose.md) ^1.0.2

## Alternatives

- [style-dictionary](https://npm.io/package/style-dictionary.md) — 2.0M weekly downloads
- [postcss-merge-idents](https://npm.io/package/postcss-merge-idents.md) — 1.7M weekly downloads
- [@fontsource/noto-sans](https://npm.io/package/@fontsource/noto-sans.md) — 93.0K weekly downloads
- [uglifycss](https://npm.io/package/uglifycss.md) — 71.6K weekly downloads
- [mat4-interpolate](https://npm.io/package/mat4-interpolate.md) — 23.3K weekly downloads

## Recent versions

- 1.0.3 (latest) — 2015-02-08
- 1.0.2 — 2014-12-09
- 1.0.1 — 2014-12-07
- 1.0.0 — 2014-12-07

## README

# mat4-interpolator

[![stable](http://badges.github.io/stability-badges/dist/stable.svg)](http://github.com/badges/stability-badges)

Builds an interpolator that acts on two 4x4 matrices, using algorithms from [W3C Spec](http://www.w3.org/TR/css3-transforms/#matrix-interpolation) to produce consistent results with CSS animations. Translation, scale, skew and perspective are interpolated linearly, and rotation is interpolated with spherical interpolation.

```js
var start = mat4.create()
var end = mat4.fromRotationTranslation([], [0,1,0,0], [20, 50, -10])
var out = mat4.create()

//create the interpolator
var lerp = require('mat4-interpolator')(start, end)

if (!lerp) { 
    //returns false is the matrices cannot be inverted
    //in this case you need to fall back to your own animation method
    lerp = discreteAnimator
}

//.. in your render loop
function render() {
    //interpolate based on alpha, storing results in 'out' matrix
    lerp(out, alpha)
}
```

**Note:** [mat4-interpolate](https://www.npmjs.com/package/mat4-interpolate) is recommended for most use cases, but this module may be useful to avoid decomposing static matrices every frame.

You can run the demo on RequireBin:

http://requirebin.com/?gist=1347c3e7fd430a191545

## Usage

[![NPM](https://nodei.co/npm/mat4-interpolator.png)](https://nodei.co/npm/mat4-interpolator/)

#### `lerp = createInterpolator(start, end)`

Creates an interpolator function that acts on the target start and end matrices. This will decompose the two matrices into components. If either matrix is non-invertible (i.e. scale or perspective W of zero), this method returns `false`. W3C suggests falling back to discrete animations in this case.

#### `lerp(out, alpha)`

The returned function accepts an `out` matrix for storing the interpolated results, and an `alpha` for how much to interpolate. 

Returns the `out` matrix.

## License

MIT, see [LICENSE.md](http://github.com/mattdesl/mat4-interpolator/blob/master/LICENSE.md) for details.

---
_Source: https://npm.io/package/mat4-interpolator · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
