UNPKG

@thi.ng/geom-poly-utils

Version:

2D polygon/polyline analysis & processing utilities

25 lines (24 loc) 764 B
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 };