@thi.ng/geom
Version:
Functional, polymorphic API for 2D geometry types & SVG generation
52 lines (51 loc) • 1.53 kB
JavaScript
import { defmulti } from "@thi.ng/defmulti/defmulti";
import { centroid as _centroid } from "@thi.ng/geom-poly-utils/centroid";
import { add } from "@thi.ng/vectors/add";
import { addmN, addmN2 } from "@thi.ng/vectors/addmn";
import { maddN } from "@thi.ng/vectors/maddn";
import { mulN } from "@thi.ng/vectors/muln";
import { set } from "@thi.ng/vectors/set";
import { bounds } from "./bounds.js";
import { __dispatch } from "./internal/dispatch.js";
const centroid = defmulti(
__dispatch,
{
arc: "circle",
bpatch: "points",
ellipse: "circle",
cubic: "points",
cubic3: "points",
line3: "line",
path: "group",
points3: "points",
poly: "points",
poly3: "points",
polyline: "points",
polyline3: "points",
quad: "points",
quad3: "points",
quadratic: "points",
quadratic3: "points",
rect: "aabb",
sphere: "circle",
text: "circle",
tri3: "tri"
},
{
aabb: ($, out) => maddN(out || [], $.size, 0.5, $.pos),
circle: ($, out) => set(out || [], $.pos),
complexpoly: ($, out) => _centroid($.boundary.points, out),
extra: () => void 0,
group: ($, out) => {
const b = bounds($);
return b ? centroid(b, out) : void 0;
},
line: ({ points }, out) => addmN2(out || [], points[0], points[1], 0.5),
points: ($, out) => _centroid($.points, out),
plane: ($, out) => mulN(out || [], $.normal, $.w),
tri: ({ points: [a, b, c] }, out) => addmN(null, add(out || [], a, b), c, 1 / 3)
}
);
export {
centroid
};