gyrovector
Version:
Gyrovector classes for hyperbolic, Euclidean, and spherical geometries
27 lines • 1.03 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.mobiusMult = exports.mobiusAdd = void 0;
const mobiusAdd = (u, v, curvature) => {
const u2kDotV = 2 * curvature.value * u.dot(v);
const uMagSq = u.dot(u);
const vMagSq = v.dot(v);
const lhs = u.mult(1 - u2kDotV - (curvature.value * vMagSq));
const rhs = v.mult(1 + (curvature.value * uMagSq));
const top = lhs.add(rhs);
const bottom = 1 - u2kDotV + (curvature.value * curvature.value * uMagSq * vMagSq);
const result = top.mult(1 / bottom);
// console.log({ u, v, lhs, rhs, bottom, result });
return result;
};
exports.mobiusAdd = mobiusAdd;
const mobiusMult = (c, u, curvature) => {
if (c === 0 || u.magSq() === 0) {
return u.mult(0);
}
const magnitude = u.mag();
const normalized = u.mult(1 / magnitude);
const result = normalized.mult(curvature.tan(c * curvature.atan(magnitude)));
return result;
};
exports.mobiusMult = mobiusMult;
//# sourceMappingURL=mobius.js.map