UNPKG

@thi.ng/vectors

Version:

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

24 lines (23 loc) 907 B
import { EPS } from "@thi.ng/math/api"; import { magS, magS2, magS3, magS4 } from "./mags.js"; import { mulNS, mulNS2, mulNS3, mulNS4 } from "./mulns.js"; import { setS, setS2, setS3, setS4 } from "./sets.js"; const normalizeS = (out, v, num, n = 1, io = 0, ia = 0, so = 1, sa = 1) => { !out && (out = v); const m = magS(v, num, ia, sa); return m >= EPS ? mulNS(out, v, n / m, num, io, ia, so, sa) : out !== v ? setS(out, v, num, io, ia, so, sa) : out; }; const $ = (mag, mulN, set) => (out, v, n = 1, io = 0, ia = 0, so = 1, sa = 1) => { !out && (out = v); const m = mag(v, ia, sa); return m >= EPS ? mulN(out, v, n / m, io, ia, so, sa) : out !== v ? set(out, v, io, ia, so, sa) : out; }; const normalizeS2 = $(magS2, mulNS2, setS2); const normalizeS3 = $(magS3, mulNS3, setS3); const normalizeS4 = $(magS4, mulNS4, setS4); export { normalizeS, normalizeS2, normalizeS3, normalizeS4 };