@thi.ng/geom-poly-utils
Version:
2D polygon/polyline analysis & processing utilities
25 lines (24 loc) • 764 B
JavaScript
import { addW3 } from "@thi.ng/vectors/addw";
import { dot } from "@thi.ng/vectors/dot";
import { magSq } from "@thi.ng/vectors/magsq";
import { setC3 } from "@thi.ng/vectors/setc";
import { sub } from "@thi.ng/vectors/sub";
const toBarycentric = (a, b, c, p, out = []) => {
const u = sub([], b, a);
const v = sub([], c, a);
const w = sub([], p, a);
const uu = magSq(u);
const vv = magSq(v);
const uv = dot(u, v);
const uw = dot(u, w);
const vw = dot(v, w);
const d = 1 / (uv * uv - uu * vv);
const s = d * (uv * vw - vv * uw);
const t = d * (uv * uw - uu * vw);
return setC3(out, 1 - (s + t), s, t);
};
const fromBarycentric = (a, b, c, p, out = []) => addW3(out, a, b, c, p[0], p[1], p[2]);
export {
fromBarycentric,
toBarycentric
};