lerp function
Interpolates linearly between two numbers, exact at both ends and extrapolated outside [0, 1].
ts
import { lerp } from 'utils';Signature
ts
export function lerp(start: number, end: number, t: number): numberParameters
| Name | Description |
|---|---|
start | The value at t = 0. |
end | The value at t = 1. |
t | The interpolation factor. |
Returns
The interpolated value.
Example
ts
lerp(0, 10, 0.25); // 2.5
lerp(0, 10, 2); // 20Tests
Line coverage: 100 %.
- ✅ interpolates 0 → 10 at 0 as 0
- ✅ interpolates 0 → 10 at 1 as 10
- ✅ interpolates 0 → 10 at 0.5 as 5
- ✅ interpolates 0 → 10 at 2 as 20
- ✅ interpolates 10 → 0 at 0.25 as 7.5
- ✅ is exact at t = 1
Source
src/math/lerp.ts (on GitHub)
Used by
remap: Maps a value from an input range to an output range, such as a sensor reading to a gauge angle.
Source code
ts
/**
* Interpolates linearly between two numbers, exact at both ends and extrapolated outside [0, 1].
*
* @param start - The value at `t = 0`.
* @param end - The value at `t = 1`.
* @param t - The interpolation factor.
* @returns The interpolated value.
* @example
* lerp(0, 10, 0.25); // 2.5
* lerp(0, 10, 2); // 20
*/
export function lerp(start: number, end: number, t: number): number {
return start * (1 - t) + end * t;
}Test file
ts
import { lerp } from './lerp';
describe(lerp, () => {
it.for([
[0, 10, 0, 0],
[0, 10, 1, 10],
[0, 10, 0.5, 5],
[0, 10, 2, 20],
[10, 0, 0.25, 7.5],
] as const)('interpolates %s → %s at %s as %s', ([start, end, t, expected]) => {
expect(lerp(start, end, t)).toBe(expected);
});
it('is exact at t = 1', () => {
expect(lerp(0.1, 0.7, 1)).toBe(0.7);
});
});Keywords: lerp, math, function