Skip to content

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): number

Parameters ​

NameDescription
startThe value at t = 0.
endThe value at t = 1.
tThe interpolation factor.

Returns ​

The interpolated value.

Example ​

ts
lerp(0, 10, 0.25); // 2.5
lerp(0, 10, 2); // 20

Tests ​

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

Generated from the JSDoc of the sources.