@woosh/meep-engine
Version:
Pure JavaScript game engine. Fully featured and production ready.
38 lines (35 loc) • 1.31 kB
JavaScript
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;
}