UNPKG

@woosh/meep-engine

Version:

Pure JavaScript game engine. Fully featured and production ready.

38 lines (35 loc) 1.31 kB
import { assert } from "../../assert.js"; /** * One-dimensional cubic Hermite to monomial-basis conversion. * * Given a Hermite segment defined by `(p0, p1, m0, m1)` whose value at parameter * `t ∈ [0, 1]` is computed by {@link spline3_hermite}, this writes the monomial * coefficients `α₀, α₁, α₂, α₃` into the result array such that * * spline3_hermite(t, p0, p1, m0, m1) === α₀ + α₁·t + α₂·t² + α₃·t³ * * for all t. * * @param {number[]|Float32Array|Float64Array} result * @param {number} result_offset * @param {number} result_stride step between successive coefficient slots; useful when interleaving multiple dimensions in one array * @param {number} p0 * @param {number} p1 * @param {number} m0 * @param {number} m1 * * @author Alex Goldring * @copyright Company Named Limited (c) 2025 */ export function spline3_hermite_to_monomial( result, result_offset, result_stride, p0, p1, m0, m1 ) { assert.greaterThan(result_stride, 0, 'result_stride must be greater than 0'); result[result_offset] = p0; result[result_offset + result_stride] = m0; result[result_offset + 2 * result_stride] = -3 * p0 + 3 * p1 - 2 * m0 - m1; result[result_offset + 3 * result_stride] = 2 * p0 - 2 * p1 + m0 + m1; }