function tangramPolygons(corners, { combination = "ABCDEFGH" } = {}) {
const [p1, p2, p3] = corners;
let polygons = [];
if (combination.includes("A")) {
const pA1 = divideLine(...p1, ...p2, 4 / 6);
const pA1o = divideLine(...p1, ...p3, 4 / 6);
const pA2 = divideLine(...pA1, ...pA1o, 1 / 4);
const pA3 = divideLine(...p1, ...p3, 1 / 6);
const polyA = [p1, pA1, pA2, pA3];
polygons.push(polyA);
}
if (combination.includes("B")) {
const pB1 = divideLine(...p1, ...p3, 1 / 6);
const pB22 = divideLine(...p2, ...p3, 1 / 6);
const pB2 = divideLine(...pB1, ...pB22, 2 / 5);
const pB32 = divideLine(...p3, ...p2, 2 / 6);
const pB3 = divideLine(...pB32, ...pB2, 1 / 3);
const pB4 = divideLine(...pB1, ...p3, 2 / 5);
const polyB = [pB1, pB2, pB3, pB4];
polygons.push(polyB);
}
if (combination.includes("C")) {
const pC1 = divideLine(...p1, ...p3, 3 / 6);
const pC2 = divideLine(...p2, ...p3, 3 / 6);
const pC3 = divideLine(...p2, ...p3, 4 / 6);
const pC4 = divideLine(...p1, ...p3, 4 / 6);
const polyC = [pC1, pC2, pC3, pC4];
polygons.push(polyC);
}
if (combination.includes("D")) {
const pD10 = divideLine(...p1, ...p3, 1 / 6);
const pD12 = divideLine(...p2, ...p3, 1 / 6);
const pD1 = divideLine(...pD10, ...pD12, 2 / 5);
const pD2 = divideLine(...pD10, ...pD12, 3 / 5);
const pDBaseA0 = divideLine(...p1, ...p3, 5 / 6);
const pDBaseA2 = divideLine(...p1, ...p2, 5 / 6);
const pD3 = divideLine(...pDBaseA0, ...pDBaseA2, 3 / 5);
const pD4 = divideLine(...pDBaseA0, ...pDBaseA2, 2 / 5);
const polyD = [pD1, pD2, pD3, pD4];
polygons.push(polyD);
}
if (combination.includes("E")) {
const pE1 = divideLine(...p1, ...p3, 4 / 6);
const pE2 = divideLine(...p3, ...p2, 2 / 6);
const polyE = [pE1, pE2, p3];
polygons.push(polyE);
}
if (combination.includes("F")) {
const pFTop0 = divideLine(...p1, ...p3, 5 / 6);
const pFTop2 = divideLine(...p1, ...p2, 5 / 6);
const pF1 = divideLine(...pFTop0, ...pFTop2, 3 / 5);
const pF2 = divideLine(...pFTop0, ...pFTop2, 2 / 5);
const pF3 = divideLine(...p2, ...p3, 3 / 6);
const pF4 = divideLine(...p2, ...p3, 2 / 6);
const polyF = [pF1, pF2, pF3, pF4];
polygons.push(polyF);
}
if (combination.includes("G")) {
const pG0 = divideLine(...p1, ...p2, 4 / 6);
const pG1 = divideLine(...p1, ...p2, 5 / 6);
const pG2 = divideLine(...p3, ...p2, 5 / 6);
const pG3 = divideLine(...p3, ...p2, 4 / 6);
const pG40 = divideLine(...p2, ...p3, 3 / 6);
const pG42 = divideLine(...p1, ...p2, 3 / 6);
const pG4 = divideLine(...pG40, ...pG42, 1 / 3);
const pG5 = divideLine(...pG40, ...pG42, 2 / 3);
const polyG = [pG0, pG1, pG2, pG3, pG4, pG5];
polygons.push(polyG);
}
if (combination.includes("H")) {
const pH1 = divideLine(...p1, ...p2, 5 / 6);
const pH2 = divideLine(...p3, ...p2, 5 / 6);
const polyH = [pH1, p2, pH2];
polygons.push(polyH);
}
return polygons;
}