# filtered-vector

> Filter an input vector valued curve

Latest version **1.2.5** (published 2021-06-03) · MIT license · 0 weekly downloads

## Install

```sh
npm install filtered-vector
pnpm add filtered-vector
yarn add filtered-vector
bun add filtered-vector
```

## Health

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

Positive: no vulnerabilities.

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

Negative: abandoned.

## Facts

| | |
|---|---|
| Version | 1.2.5 |
| Published | 2021-06-03 |
| First published | 2015-02-02 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 2 |
| Unpacked size | 14 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 19 |
| Author | Mikola Lysenko |
| Maintainers | mikolalysenko |
| Keywords | filter, input, curve, device, mouse |

## Links

- npm: https://www.npmjs.com/package/filtered-vector
- Repository: https://github.com/mikolalysenko/filtered-vector
- Issues: https://github.com/mikolalysenko/filtered-vector/issues
- npm.io page: https://npm.io/package/filtered-vector

## Dependencies (2)

- [cubic-hermite](https://npm.io/package/cubic-hermite.md) ^1.0.0
- [binary-search-bounds](https://npm.io/package/binary-search-bounds.md) ^2.0.0

## Recent versions

- 1.2.5 (latest) — 2021-06-03
- 1.2.4 — 2015-05-26
- 1.2.3 — 2015-02-13
- 1.2.2 — 2015-02-12
- 1.2.1 — 2015-02-05
- 1.2.0 — 2015-02-04
- 1.1.0 — 2015-02-02
- 1.0.0 — 2015-02-02

## README

filtered-vector
===============
Applies cubic smoothing to a vector valued curve.  This is useful for smoothing out inputs from the mouse or other input devices.

# Example

```javascript
var now = require('right-now')
var filterVector = require('filtered-vector')
var smoothPosition = filterVector([256, 256])

var canvas = document.createElement('canvas')
canvas.width = 512
canvas.height = 512
document.body.appendChild(canvas)
var context = canvas.getContext('2d')

canvas.addEventListener('mousemove', function(ev) {
  smoothPosition.push(now(), ev.x, ev.y)
})

function paint() {
  requestAnimationFrame(paint)
  var t = now()
  context.fillStyle = 'rgba(0,0,0,1)'
  context.fillRect(0,0,512,512)
  
  context.strokeStyle = '#0f0'
  context.lineWidth = 1
  context.beginPath()
  var x = smoothPosition.curve(t)
  context.moveTo(x[0], x[1])
  for(var i=0; i<2000; ++i) {
    var y = smoothPosition.curve(Math.floor(t - i))
    context.lineTo(y[0], y[1])
  }
  context.stroke()
}
paint()
```

[Try out the demo in your browser.](https://mikolalysenko.github.io/filtered-vector)

# Install

```
npm i filtered-vector
```

# API

## Constructor

#### `var vec = require('filtered-vector')(initState[, initVelocity, initTime])`
Creates a new smoothed vector with the given initial state, velocity and time.

* `initState` is the initial state of the vector
* `initVelocity` is the initial velocity of the vector
* `initTime` is the initial time of the vector

**Returns** A new smoothed vector valued curve

## Methods

#### `vec.curve(t)`
Computes the value of the curve at time `t`

* `t` is the time parameter to sample the curve

**Returns** The value of the curve at time `t`

#### `vec.dcurve(t)`
Computes the derivative of the curve at time `t`

* `t` is the time parameter

**Returns** The derivative of the curve at time `t`

#### `vec.bounds`
A pair of arrays giving the upper and lower bounds on the constraints of the vector.  Default is `[-Infinity,-Infinity, ...]` and `[Infinity,Infinity,...]`

#### `vec.push(t, ...)`
Adds a new data point onto the end of the curve

* `t` is the time the new data point was sampled
* `...` are the components of the curve vector

#### `vec.move(t, ...)`
Incrementally moves the curve from the last sampled position by an offset.  This is useful with input devices that emit relative motion (for example scrolling, key press events, pointer lock)

* `t` is the time at which the move event occured
* `...` are the components of the relative motion

#### `vec.set(t, ...)`
Sets the state of the curve at time `t`

* `t` is the time parameter to sample
* `...` are the components of the state

#### `vec.jump(t, ...)`
Sets the state of the vector at time `t` with no smoothing.

* `t` is the time parameter to sample
* `...` are the components of the vector

#### `vec.idle(t)`
Adds a stationary data point to the curve (ie notify the curve that no input state has changed)

* `t` is the time at which the curve was idle

#### `vec.flush(t)`
Removes all samples in the buffer before time `t`

* `t` is the cutoff time

#### `vec.lastT()`

**Returns** The time of the last sample in the curve

#### `vec.stable()`

**Returns** `true` is the vector is stationary as of the last event.

# License
(c) 2015 Mikola Lysenko.  MIT License

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