triangule
Version:
a library for triangulation and other triangle calculations
209 lines • 6.21 kB
JavaScript
// 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