@thi.ng/vectors
Version:
Optimized 2d/3d/4d and arbitrary length vector operations, support for memory mapping/layouts
32 lines (31 loc) • 971 B
JavaScript
import { EPS } from "@thi.ng/math/api";
import { mag } from "./mag.js";
import { magSq2, magSq3, magSq4 } from "./magsq.js";
import { mulN, mulN2, mulN3, mulN4 } from "./muln.js";
import { set, set2, set3, set4 } from "./set.js";
const normalize = (out, v, n = 1) => {
!out && (out = v);
const m = mag(v);
return m >= EPS ? mulN(out, v, n / m) : out !== v ? set(out, v) : out;
};
const normalize2 = (out, v, n = 1) => {
!out && (out = v);
const m = Math.sqrt(magSq2(v));
return m >= EPS ? mulN2(out, v, n / m) : out !== v ? set2(out, v) : out;
};
const normalize3 = (out, v, n = 1) => {
!out && (out = v);
const m = Math.sqrt(magSq3(v));
return m >= EPS ? mulN3(out, v, n / m) : out !== v ? set3(out, v) : out;
};
const normalize4 = (out, v, n = 1) => {
!out && (out = v);
const m = Math.sqrt(magSq4(v));
return m >= EPS ? mulN4(out, v, n / m) : out !== v ? set4(out, v) : out;
};
export {
normalize,
normalize2,
normalize3,
normalize4
};