thi-ng/umbrella

View on GitHub
packages/transducers/src/line.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { map } from "./map.js";
import { normRange } from "./norm-range.js";

/**
 * Iterator yielding `steps` + 1 interpolated values on a line in the closed
 * `[start .. end]` interval.
 *
 * @remarks
 * This is similar to {@link range}, but potentially provides more precise
 * values (by avoiding the accumulation of floating point errors during
 * iteration).
 *
 * Similar functionality (w/ more options) is availble here:
 * [`line()`](https://docs.thi.ng/umbrella/dsp/functions/line.html).
 *
 * @example
 * ```ts
 * import { line } from "@thi.ng/transducers";
 *
 * [...line(50, 100, 10)]
 * // [
 * //    50, 55, 60, 65, 70,
 * //    75, 80, 85, 90, 95,
 * //   100
 * // ]
 * ```
 *
 * @param start -
 * @param end -
 * @param steps -
 */
export const line = (start: number, end: number, steps = 10) => {
    const delta = end - start;
    return map((t) => start + delta * t, normRange(steps));
};