UNPKG

@thi.ng/vectors

Version:

Optimized 2d/3d/4d and arbitrary length vector operations, support for memory mapping/layouts

50 lines (49 loc) 1.07 kB
import { addmN } from "./addmn.js"; import { addW4 } from "./addw.js"; import { submN } from "./submn.js"; const mixCubicHermite = (out, a, ta, b, tb, t) => { const s = t - 1; const t2 = t * t; const s2 = s * s; return addW4( out, a, ta, b, tb, (1 + 2 * t) * s2, t * s2, t2 * (3 - 2 * t), t2 * s ); }; const mixHermiteCardinal = (out, a, b, c, d, t, scale = 0.5) => mixCubicHermite( out, b, tangentCardinal([], a, c, scale), c, tangentCardinal([], b, d, scale), t ); const mixHermiteDiff3 = (out, a, b, c, d, t) => mixCubicHermite( out, b, tangentDiff3([], a, b, c), c, tangentDiff3([], b, c, d), t ); const tangentCardinal = (out, prev, next, scale = 0.5, ta = 0, tc = 2) => submN(out, next, prev, scale / (tc - ta)); const tangentDiff3 = (out, prev, curr, next, ta = 0, tb = 1, tc = 2) => addmN( out, submN(out, curr, prev, 1 / (tb - ta)), submN([], next, curr, 1 / (tc - tb)), 0.5 ); export { mixCubicHermite, mixHermiteCardinal, mixHermiteDiff3, tangentCardinal, tangentDiff3 };