UNPKG

triangule

Version:

a library for triangulation and other triangle calculations

209 lines 6.21 kB
// src/index.ts function ffix(ifloat) { return ifloat.toFixed(2); } function triDegRad(aDeg) { const rA = aDeg * Math.PI / 180; return rA; } function triRadDeg(aRad) { const rAdeg = aRad * 180 / Math.PI; return rAdeg; } function triAPiPi(aRad) { let rA = aRad; while (rA < -Math.PI) { rA += 2 * Math.PI; } while (rA > Math.PI) { rA -= 2 * Math.PI; } return rA; } function triA02Pi(aRad) { let rA = triAPiPi(aRad); if (rA < 0) { rA += 2 * Math.PI; } return rA; } function triA0Pi(aRad) { let rA = triAPiPi(aRad); if (rA < 0) { rA += Math.PI; } return rA; } function triAPihPih(aRad) { let rA = triAPiPi(aRad); if (rA < -Math.PI / 2) { rA += Math.PI; } if (rA > Math.PI / 2) { rA -= Math.PI; } return rA; } function triIsZero(aFloat) { let rb = false; const tolerance = 10 ** -4; if (Math.abs(aFloat) < tolerance) { rb = true; } return rb; } var ECheck = /* @__PURE__ */ ((ECheck2) => { ECheck2[ECheck2["eError"] = 0] = "eError"; ECheck2[ECheck2["eWarn"] = 1] = "eWarn"; ECheck2[ECheck2["eIgnore"] = 2] = "eIgnore"; return ECheck2; })(ECheck || {}); function triCheckAction(strID, msg, checkLevel) { let rStr = ""; if (checkLevel === 0 /* eError */) { throw `err${strID}: ${msg}`; } else if (checkLevel === 1 /* eWarn */) { rStr += `warn${strID}: ${msg} `; } return rStr; } function triCheckA(a1, ctx, checkLevel = 0 /* eError */) { let rStr = ""; const a1b = triAPiPi(a1); if (a1b <= 0 || triIsZero(a1b)) { const eMsg = `${ctx} : a1 ${ffix(a1)}, a1b ${ffix(a1b)} is null or negative`; rStr += triCheckAction("145", eMsg, checkLevel); } return rStr; } function triCheckL(l1, ctx, checkLevel = 0 /* eError */) { let rStr = ""; if (l1 <= 0 || triIsZero(l1)) { const eMsg = `${ctx} : l1 ${ffix(l1)} is null or negative`; rStr += triCheckAction("159", eMsg, checkLevel); } return rStr; } function triAArA(a1, a2, checkLevel = 0 /* eError */) { let rStr = ""; const a1b = triAPiPi(a1); const a2b = triAPiPi(a2); rStr += triCheckA(a1b, "triAArA.a1", 2 /* eIgnore */); rStr += triCheckA(a2b, "triAArA.a2", 2 /* eIgnore */); if (Math.sign(a1) * Math.sign(a2) < 0) { const eMsg = `triAArA : the signs of a1 ${ffix(a1)} and a2 ${ffix(a2)} differ`; rStr += triCheckAction("178", eMsg, checkLevel); } if (Math.abs(a1b) + Math.abs(a2b) >= Math.PI) { const eMsg = `triAArA : a1 ${ffix(a1)} plus a2 ${ffix(a2)} are bigger than Pi`; rStr += triCheckAction("182", eMsg, checkLevel); } const rA = triAPiPi(Math.PI - a1 - a2); return [rA, rStr]; } function triALArLL(a1, l12, a2, checkLevel = 0 /* eError */) { let rStr = ""; const [a3, str2] = triAArA(a1, a2, checkLevel); rStr += str2; rStr += triCheckL(l12, "triALArLL.l12", checkLevel); let rl23 = 0; let rl31 = 0; if (triIsZero(a3)) { const eMsg = `triALArLL : flat triangle with a1 ${ffix(a1)}, a2 ${ffix(a2)} and a3 ${ffix(a3)}`; rStr += triCheckAction("209", eMsg, checkLevel); if (triIsZero(a1)) { rl23 = 0; rl31 = l12; } else { rl23 = l12; rl31 = 0; } } else { rl23 = l12 * Math.sin(a1) / Math.sin(a3); rl31 = l12 * Math.sin(a2) / Math.sin(a3); } return [rl23, rl31, rStr]; } function triLALrL(l1, a12, l2, checkLevel = 0 /* eError */) { let rStr = ""; rStr += triCheckL(l1, "triLALrL.l1", checkLevel); rStr += triCheckA(a12, "triLALrL.a12", 2 /* eIgnore */); rStr += triCheckL(l2, "triLALrL.l2", checkLevel); const ql3 = l1 ** 2 + l2 ** 2 - 2 * l1 * l2 * Math.cos(a12); if (ql3 < 0) { const eMsg = `triLALrL : ql3 ${ffix(ql3)} is negative with l1 ${ffix(l1)}, a12 ${ffix(a12)}, l2 ${ffix(l2)}`; rStr += triCheckAction("241", eMsg, checkLevel); } const rl3 = Math.sqrt(ql3); return [rl3, rStr]; } function triALLrL(a31, l1, l2, checkLevel = 0 /* eError */) { let rStr = ""; rStr += triCheckA(a31, "triALLrL.a31", 2 /* eIgnore */); rStr += triCheckL(l1, "triALLrL.l1", checkLevel); rStr += triCheckL(l2, "triALLrL.l2", checkLevel); const qB = -2 * l1 * Math.cos(a31); const qC = l1 ** 2 - l2 ** 2; const qD = qB ** 2 - 4 * qC; if (qD < 0) { const eMsg = `triALLrL : qD ${ffix(qD)} is negative with a31 ${ffix(a31)}, l1 ${ffix(l1)}, l2 ${ffix(l2)}`; rStr += triCheckAction("271", eMsg, checkLevel); } const rx1 = (-qB - Math.sqrt(qD)) / 2; const rx2 = (-qB + Math.sqrt(qD)) / 2; rStr += triCheckL(rx1, "triALLrL.rx1", 2 /* eIgnore */); rStr += triCheckL(rx2, "triALLrL.rx2", 2 /* eIgnore */); return [rx1, rx2, rStr]; } function triALLrLAA(a31, l1, l2, checkLevel = 0 /* eError */) { let rStr = ""; const [rl3a, rl3b, str2] = triALLrL(a31, l1, l2, checkLevel); rStr += str2; const ra31a = rl3a > 0 ? a31 : triAPiPi(a31 - Math.PI); const ra31b = rl3b > 0 ? a31 : triAPiPi(a31 - Math.PI); const [a12a, str3] = triLLLrA(l2, Math.abs(rl3a), l1, checkLevel); const [a12b, str4] = triLLLrA(l2, Math.abs(rl3b), l1, checkLevel); rStr += str3 + str4; const ra12a = Math.sign(ra31a) * a12a; const ra12b = Math.sign(ra31b) * a12b; return [rl3a, ra31a, ra12a, rl3b, ra31b, ra12b, rStr]; } function triLLLrA(l1, l2, l3, checkLevel = 0 /* eError */) { let rStr = ""; rStr += triCheckL(l1, "triLLLrA.l1", checkLevel); rStr += triCheckL(l2, "triLLLrA.l2", checkLevel); rStr += triCheckL(l3, "triLLLrA.l3", checkLevel); const cosA31 = (l3 ** 2 + l1 ** 2 - l2 ** 2) / (2 * l3 * l1); if (Math.abs(cosA31) > 1) { const eMsg = `triLLLrA : cosA31 ${ffix(cosA31)} is bigger than 1`; rStr += triCheckAction("296", eMsg, checkLevel); } const ra31 = Math.acos(cosA31); return [ra31, rStr]; } function triLLLrAAA(l1, l2, l3, checkLevel = 0 /* eError */) { let rStr = ""; const [ra31, str2] = triLLLrA(l1, l2, l3, checkLevel); const [ra12, str3] = triLLLrA(l2, l3, l1, checkLevel); const [ra23, str4] = triAArA(ra31, ra12, checkLevel); rStr += str2 + str3 + str4; return [ra31, ra12, ra23, rStr]; } export { ECheck, triA02Pi, triA0Pi, triAArA, triALArLL, triALLrL, triALLrLAA, triAPiPi, triAPihPih, triDegRad, triLALrL, triLLLrA, triLLLrAAA, triRadDeg }; //# sourceMappingURL=index.js.map