UNPKG

gyrovector

Version:

Gyrovector classes for hyperbolic, Euclidean, and spherical geometries

34 lines (30 loc) 952 B
const tan = (curvature: number) => (x: number) => { if (curvature < 0) { return ( (1 / Math.sqrt(-curvature)) * Math.tanh(Math.sqrt(-curvature) * x) ); } else if (curvature === 0) { return x; } else { return (1 / Math.sqrt(curvature)) * Math.tan(Math.sqrt(curvature) * x); } }; const atan = (curvature: number) => (x: number) => { if (curvature < 0) { return ( (1 / Math.sqrt(-curvature)) * Math.atanh(Math.sqrt(-curvature) * x) ); } else if (curvature === 0) { return x; } else { return (1 / Math.sqrt(curvature)) * Math.atan(Math.sqrt(curvature) * x); } }; export type Curvature = { value: number; tan: (x: number) => number; atan: (x: number) => number; }; export const createCurvature = (curvature: number): Readonly<Curvature> => { return { value: curvature, tan: tan(curvature), atan: atan(curvature) }; };