@thi.ng/vectors
Version:
Optimized 2d/3d/4d and arbitrary length vector operations, support for memory mapping/layouts
24 lines (23 loc) • 907 B
JavaScript
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
};