|  | @@ -22,22 +22,25 @@ export type Direction = NVector;
 | 
	
		
			
				|  |  |  export type Line = NVector;
 | 
	
		
			
				|  |  |  export type Transform = NVector;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -export function point(x: number, y: number): Point {
 | 
	
		
			
				|  |  | -  return [0, 0, 0, 0, y, x, 1, 0];
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +export const point = (x: number, y: number): Point => [0, 0, 0, 0, y, x, 1, 0];
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -export function origin(): Point {
 | 
	
		
			
				|  |  | -  return [0, 0, 0, 0, 0, 0, 1, 0];
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +export const origin = (): Point => [0, 0, 0, 0, 0, 0, 1, 0];
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -export function direction(x: number, y: number): Direction {
 | 
	
		
			
				|  |  | +export const direction = (x: number, y: number): Direction => {
 | 
	
		
			
				|  |  |    const norm = Math.hypot(x, y); // same as `inorm(direction(x, y))`
 | 
	
		
			
				|  |  |    return [0, 0, 0, 0, y / norm, x / norm, 0, 0];
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -export function offset(x: number, y: number): Direction {
 | 
	
		
			
				|  |  | -  return [0, 0, 0, 0, y, x, 0, 0];
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +export const offset = (x: number, y: number): Direction => [
 | 
	
		
			
				|  |  | +  0,
 | 
	
		
			
				|  |  | +  0,
 | 
	
		
			
				|  |  | +  0,
 | 
	
		
			
				|  |  | +  0,
 | 
	
		
			
				|  |  | +  y,
 | 
	
		
			
				|  |  | +  x,
 | 
	
		
			
				|  |  | +  0,
 | 
	
		
			
				|  |  | +  0,
 | 
	
		
			
				|  |  | +];
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  /// This is the "implementation" part of the library
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -56,7 +59,7 @@ type NVector = readonly [
 | 
	
		
			
				|  |  |  const NVECTOR_BASE = ["1", "e0", "e1", "e2", "e01", "e20", "e12", "e012"];
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  // Used to represent points, lines and transformations
 | 
	
		
			
				|  |  | -export function nvector(value: number = 0, index: number = 0): NVector {
 | 
	
		
			
				|  |  | +export const nvector = (value: number = 0, index: number = 0): NVector => {
 | 
	
		
			
				|  |  |    const result = [0, 0, 0, 0, 0, 0, 0, 0];
 | 
	
		
			
				|  |  |    if (index < 0 || index > 7) {
 | 
	
		
			
				|  |  |      throw new Error(`Expected \`index\` betwen 0 and 7, got \`${index}\``);
 | 
	
	
		
			
				|  | @@ -65,10 +68,10 @@ export function nvector(value: number = 0, index: number = 0): NVector {
 | 
	
		
			
				|  |  |      result[index] = value;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |    return (result as unknown) as NVector;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  const STRING_EPSILON = 0.000001;
 | 
	
		
			
				|  |  | -export function toString(nvector: NVector): string {
 | 
	
		
			
				|  |  | +export const toString = (nvector: NVector): string => {
 | 
	
		
			
				|  |  |    const result = nvector
 | 
	
		
			
				|  |  |      .map((value, index) =>
 | 
	
		
			
				|  |  |        Math.abs(value) > STRING_EPSILON
 | 
	
	
		
			
				|  | @@ -79,66 +82,58 @@ export function toString(nvector: NVector): string {
 | 
	
		
			
				|  |  |      .filter((representation) => representation != null)
 | 
	
		
			
				|  |  |      .join(" + ");
 | 
	
		
			
				|  |  |    return result === "" ? "0" : result;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  // Reverse the order of the basis blades.
 | 
	
		
			
				|  |  | -export function reverse(nvector: NVector): NVector {
 | 
	
		
			
				|  |  | -  return [
 | 
	
		
			
				|  |  | -    nvector[0],
 | 
	
		
			
				|  |  | -    nvector[1],
 | 
	
		
			
				|  |  | -    nvector[2],
 | 
	
		
			
				|  |  | -    nvector[3],
 | 
	
		
			
				|  |  | -    -nvector[4],
 | 
	
		
			
				|  |  | -    -nvector[5],
 | 
	
		
			
				|  |  | -    -nvector[6],
 | 
	
		
			
				|  |  | -    -nvector[7],
 | 
	
		
			
				|  |  | -  ];
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +export const reverse = (nvector: NVector): NVector => [
 | 
	
		
			
				|  |  | +  nvector[0],
 | 
	
		
			
				|  |  | +  nvector[1],
 | 
	
		
			
				|  |  | +  nvector[2],
 | 
	
		
			
				|  |  | +  nvector[3],
 | 
	
		
			
				|  |  | +  -nvector[4],
 | 
	
		
			
				|  |  | +  -nvector[5],
 | 
	
		
			
				|  |  | +  -nvector[6],
 | 
	
		
			
				|  |  | +  -nvector[7],
 | 
	
		
			
				|  |  | +];
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  // Poincare duality operator.
 | 
	
		
			
				|  |  | -export function dual(nvector: NVector): NVector {
 | 
	
		
			
				|  |  | -  return [
 | 
	
		
			
				|  |  | -    nvector[7],
 | 
	
		
			
				|  |  | -    nvector[6],
 | 
	
		
			
				|  |  | -    nvector[5],
 | 
	
		
			
				|  |  | -    nvector[4],
 | 
	
		
			
				|  |  | -    nvector[3],
 | 
	
		
			
				|  |  | -    nvector[2],
 | 
	
		
			
				|  |  | -    nvector[1],
 | 
	
		
			
				|  |  | -    nvector[0],
 | 
	
		
			
				|  |  | -  ];
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +export const dual = (nvector: NVector): NVector => [
 | 
	
		
			
				|  |  | +  nvector[7],
 | 
	
		
			
				|  |  | +  nvector[6],
 | 
	
		
			
				|  |  | +  nvector[5],
 | 
	
		
			
				|  |  | +  nvector[4],
 | 
	
		
			
				|  |  | +  nvector[3],
 | 
	
		
			
				|  |  | +  nvector[2],
 | 
	
		
			
				|  |  | +  nvector[1],
 | 
	
		
			
				|  |  | +  nvector[0],
 | 
	
		
			
				|  |  | +];
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  // Clifford Conjugation
 | 
	
		
			
				|  |  | -export function conjugate(nvector: NVector): NVector {
 | 
	
		
			
				|  |  | -  return [
 | 
	
		
			
				|  |  | -    nvector[0],
 | 
	
		
			
				|  |  | -    -nvector[1],
 | 
	
		
			
				|  |  | -    -nvector[2],
 | 
	
		
			
				|  |  | -    -nvector[3],
 | 
	
		
			
				|  |  | -    -nvector[4],
 | 
	
		
			
				|  |  | -    -nvector[5],
 | 
	
		
			
				|  |  | -    -nvector[6],
 | 
	
		
			
				|  |  | -    nvector[7],
 | 
	
		
			
				|  |  | -  ];
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +export const conjugate = (nvector: NVector): NVector => [
 | 
	
		
			
				|  |  | +  nvector[0],
 | 
	
		
			
				|  |  | +  -nvector[1],
 | 
	
		
			
				|  |  | +  -nvector[2],
 | 
	
		
			
				|  |  | +  -nvector[3],
 | 
	
		
			
				|  |  | +  -nvector[4],
 | 
	
		
			
				|  |  | +  -nvector[5],
 | 
	
		
			
				|  |  | +  -nvector[6],
 | 
	
		
			
				|  |  | +  nvector[7],
 | 
	
		
			
				|  |  | +];
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  // Main involution
 | 
	
		
			
				|  |  | -export function involute(nvector: NVector): NVector {
 | 
	
		
			
				|  |  | -  return [
 | 
	
		
			
				|  |  | -    nvector[0],
 | 
	
		
			
				|  |  | -    -nvector[1],
 | 
	
		
			
				|  |  | -    -nvector[2],
 | 
	
		
			
				|  |  | -    -nvector[3],
 | 
	
		
			
				|  |  | -    nvector[4],
 | 
	
		
			
				|  |  | -    nvector[5],
 | 
	
		
			
				|  |  | -    nvector[6],
 | 
	
		
			
				|  |  | -    -nvector[7],
 | 
	
		
			
				|  |  | -  ];
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +export const involute = (nvector: NVector): NVector => [
 | 
	
		
			
				|  |  | +  nvector[0],
 | 
	
		
			
				|  |  | +  -nvector[1],
 | 
	
		
			
				|  |  | +  -nvector[2],
 | 
	
		
			
				|  |  | +  -nvector[3],
 | 
	
		
			
				|  |  | +  nvector[4],
 | 
	
		
			
				|  |  | +  nvector[5],
 | 
	
		
			
				|  |  | +  nvector[6],
 | 
	
		
			
				|  |  | +  -nvector[7],
 | 
	
		
			
				|  |  | +];
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  // Multivector addition
 | 
	
		
			
				|  |  | -export function add(a: NVector, b: NVector | number): NVector {
 | 
	
		
			
				|  |  | +export const add = (a: NVector, b: NVector | number): NVector => {
 | 
	
		
			
				|  |  |    if (isNumber(b)) {
 | 
	
		
			
				|  |  |      return [a[0] + b, a[1], a[2], a[3], a[4], a[5], a[6], a[7]];
 | 
	
		
			
				|  |  |    }
 | 
	
	
		
			
				|  | @@ -152,10 +147,10 @@ export function add(a: NVector, b: NVector | number): NVector {
 | 
	
		
			
				|  |  |      a[6] + b[6],
 | 
	
		
			
				|  |  |      a[7] + b[7],
 | 
	
		
			
				|  |  |    ];
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  // Multivector subtraction
 | 
	
		
			
				|  |  | -export function sub(a: NVector, b: NVector | number): NVector {
 | 
	
		
			
				|  |  | +export const sub = (a: NVector, b: NVector | number): NVector => {
 | 
	
		
			
				|  |  |    if (isNumber(b)) {
 | 
	
		
			
				|  |  |      return [a[0] - b, a[1], a[2], a[3], a[4], a[5], a[6], a[7]];
 | 
	
		
			
				|  |  |    }
 | 
	
	
		
			
				|  | @@ -169,10 +164,10 @@ export function sub(a: NVector, b: NVector | number): NVector {
 | 
	
		
			
				|  |  |      a[6] - b[6],
 | 
	
		
			
				|  |  |      a[7] - b[7],
 | 
	
		
			
				|  |  |    ];
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  // The geometric product.
 | 
	
		
			
				|  |  | -export function mul(a: NVector, b: NVector | number): NVector {
 | 
	
		
			
				|  |  | +export const mul = (a: NVector, b: NVector | number): NVector => {
 | 
	
		
			
				|  |  |    if (isNumber(b)) {
 | 
	
		
			
				|  |  |      return [
 | 
	
		
			
				|  |  |        a[0] * b,
 | 
	
	
		
			
				|  | @@ -223,112 +218,94 @@ export function mul(a: NVector, b: NVector | number): NVector {
 | 
	
		
			
				|  |  |        b[1] * a[6] +
 | 
	
		
			
				|  |  |        b[0] * a[7],
 | 
	
		
			
				|  |  |    ];
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -export function mulScalar(a: NVector, b: NVector): number {
 | 
	
		
			
				|  |  | -  return b[0] * a[0] + b[2] * a[2] + b[3] * a[3] - b[6] * a[6];
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +export const mulScalar = (a: NVector, b: NVector): number =>
 | 
	
		
			
				|  |  | +  b[0] * a[0] + b[2] * a[2] + b[3] * a[3] - b[6] * a[6];
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  // The outer/exterior/wedge product.
 | 
	
		
			
				|  |  | -export function meet(a: NVector, b: NVector): NVector {
 | 
	
		
			
				|  |  | -  return [
 | 
	
		
			
				|  |  | -    b[0] * a[0],
 | 
	
		
			
				|  |  | -    b[1] * a[0] + b[0] * a[1],
 | 
	
		
			
				|  |  | -    b[2] * a[0] + b[0] * a[2],
 | 
	
		
			
				|  |  | -    b[3] * a[0] + b[0] * a[3],
 | 
	
		
			
				|  |  | -    b[4] * a[0] + b[2] * a[1] - b[1] * a[2] + b[0] * a[4],
 | 
	
		
			
				|  |  | -    b[5] * a[0] - b[3] * a[1] + b[1] * a[3] + b[0] * a[5],
 | 
	
		
			
				|  |  | -    b[6] * a[0] + b[3] * a[2] - b[2] * a[3] + b[0] * a[6],
 | 
	
		
			
				|  |  | -    b[7] * a[0] +
 | 
	
		
			
				|  |  | -      b[6] * a[1] +
 | 
	
		
			
				|  |  | -      b[5] * a[2] +
 | 
	
		
			
				|  |  | -      b[4] * a[3] +
 | 
	
		
			
				|  |  | -      b[3] * a[4] +
 | 
	
		
			
				|  |  | -      b[2] * a[5] +
 | 
	
		
			
				|  |  | -      b[1] * a[6],
 | 
	
		
			
				|  |  | -  ];
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +export const meet = (a: NVector, b: NVector): NVector => [
 | 
	
		
			
				|  |  | +  b[0] * a[0],
 | 
	
		
			
				|  |  | +  b[1] * a[0] + b[0] * a[1],
 | 
	
		
			
				|  |  | +  b[2] * a[0] + b[0] * a[2],
 | 
	
		
			
				|  |  | +  b[3] * a[0] + b[0] * a[3],
 | 
	
		
			
				|  |  | +  b[4] * a[0] + b[2] * a[1] - b[1] * a[2] + b[0] * a[4],
 | 
	
		
			
				|  |  | +  b[5] * a[0] - b[3] * a[1] + b[1] * a[3] + b[0] * a[5],
 | 
	
		
			
				|  |  | +  b[6] * a[0] + b[3] * a[2] - b[2] * a[3] + b[0] * a[6],
 | 
	
		
			
				|  |  | +  b[7] * a[0] +
 | 
	
		
			
				|  |  | +    b[6] * a[1] +
 | 
	
		
			
				|  |  | +    b[5] * a[2] +
 | 
	
		
			
				|  |  | +    b[4] * a[3] +
 | 
	
		
			
				|  |  | +    b[3] * a[4] +
 | 
	
		
			
				|  |  | +    b[2] * a[5] +
 | 
	
		
			
				|  |  | +    b[1] * a[6],
 | 
	
		
			
				|  |  | +];
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  // The regressive product.
 | 
	
		
			
				|  |  | -export function join(a: NVector, b: NVector): NVector {
 | 
	
		
			
				|  |  | -  return [
 | 
	
		
			
				|  |  | -    joinScalar(a, b),
 | 
	
		
			
				|  |  | -    a[1] * b[7] + a[4] * b[5] - a[5] * b[4] + a[7] * b[1],
 | 
	
		
			
				|  |  | -    a[2] * b[7] - a[4] * b[6] + a[6] * b[4] + a[7] * b[2],
 | 
	
		
			
				|  |  | -    a[3] * b[7] + a[5] * b[6] - a[6] * b[5] + a[7] * b[3],
 | 
	
		
			
				|  |  | -    a[4] * b[7] + a[7] * b[4],
 | 
	
		
			
				|  |  | -    a[5] * b[7] + a[7] * b[5],
 | 
	
		
			
				|  |  | -    a[6] * b[7] + a[7] * b[6],
 | 
	
		
			
				|  |  | -    a[7] * b[7],
 | 
	
		
			
				|  |  | -  ];
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +export const join = (a: NVector, b: NVector): NVector => [
 | 
	
		
			
				|  |  | +  joinScalar(a, b),
 | 
	
		
			
				|  |  | +  a[1] * b[7] + a[4] * b[5] - a[5] * b[4] + a[7] * b[1],
 | 
	
		
			
				|  |  | +  a[2] * b[7] - a[4] * b[6] + a[6] * b[4] + a[7] * b[2],
 | 
	
		
			
				|  |  | +  a[3] * b[7] + a[5] * b[6] - a[6] * b[5] + a[7] * b[3],
 | 
	
		
			
				|  |  | +  a[4] * b[7] + a[7] * b[4],
 | 
	
		
			
				|  |  | +  a[5] * b[7] + a[7] * b[5],
 | 
	
		
			
				|  |  | +  a[6] * b[7] + a[7] * b[6],
 | 
	
		
			
				|  |  | +  a[7] * b[7],
 | 
	
		
			
				|  |  | +];
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -export function joinScalar(a: NVector, b: NVector): number {
 | 
	
		
			
				|  |  | -  return (
 | 
	
		
			
				|  |  | -    a[0] * b[7] +
 | 
	
		
			
				|  |  | -    a[1] * b[6] +
 | 
	
		
			
				|  |  | -    a[2] * b[5] +
 | 
	
		
			
				|  |  | -    a[3] * b[4] +
 | 
	
		
			
				|  |  | -    a[4] * b[3] +
 | 
	
		
			
				|  |  | -    a[5] * b[2] +
 | 
	
		
			
				|  |  | -    a[6] * b[1] +
 | 
	
		
			
				|  |  | -    a[7] * b[0]
 | 
	
		
			
				|  |  | -  );
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +export const joinScalar = (a: NVector, b: NVector): number =>
 | 
	
		
			
				|  |  | +  a[0] * b[7] +
 | 
	
		
			
				|  |  | +  a[1] * b[6] +
 | 
	
		
			
				|  |  | +  a[2] * b[5] +
 | 
	
		
			
				|  |  | +  a[3] * b[4] +
 | 
	
		
			
				|  |  | +  a[4] * b[3] +
 | 
	
		
			
				|  |  | +  a[5] * b[2] +
 | 
	
		
			
				|  |  | +  a[6] * b[1] +
 | 
	
		
			
				|  |  | +  a[7] * b[0];
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  // The inner product.
 | 
	
		
			
				|  |  | -export function dot(a: NVector, b: NVector): NVector {
 | 
	
		
			
				|  |  | -  return [
 | 
	
		
			
				|  |  | -    b[0] * a[0] + b[2] * a[2] + b[3] * a[3] - b[6] * a[6],
 | 
	
		
			
				|  |  | -    b[1] * a[0] +
 | 
	
		
			
				|  |  | -      b[0] * a[1] -
 | 
	
		
			
				|  |  | -      b[4] * a[2] +
 | 
	
		
			
				|  |  | -      b[5] * a[3] +
 | 
	
		
			
				|  |  | -      b[2] * a[4] -
 | 
	
		
			
				|  |  | -      b[3] * a[5] -
 | 
	
		
			
				|  |  | -      b[7] * a[6] -
 | 
	
		
			
				|  |  | -      b[6] * a[7],
 | 
	
		
			
				|  |  | -    b[2] * a[0] + b[0] * a[2] - b[6] * a[3] + b[3] * a[6],
 | 
	
		
			
				|  |  | -    b[3] * a[0] + b[6] * a[2] + b[0] * a[3] - b[2] * a[6],
 | 
	
		
			
				|  |  | -    b[4] * a[0] + b[7] * a[3] + b[0] * a[4] + b[3] * a[7],
 | 
	
		
			
				|  |  | -    b[5] * a[0] + b[7] * a[2] + b[0] * a[5] + b[2] * a[7],
 | 
	
		
			
				|  |  | -    b[6] * a[0] + b[0] * a[6],
 | 
	
		
			
				|  |  | -    b[7] * a[0] + b[0] * a[7],
 | 
	
		
			
				|  |  | -  ];
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +export const dot = (a: NVector, b: NVector): NVector => [
 | 
	
		
			
				|  |  | +  b[0] * a[0] + b[2] * a[2] + b[3] * a[3] - b[6] * a[6],
 | 
	
		
			
				|  |  | +  b[1] * a[0] +
 | 
	
		
			
				|  |  | +    b[0] * a[1] -
 | 
	
		
			
				|  |  | +    b[4] * a[2] +
 | 
	
		
			
				|  |  | +    b[5] * a[3] +
 | 
	
		
			
				|  |  | +    b[2] * a[4] -
 | 
	
		
			
				|  |  | +    b[3] * a[5] -
 | 
	
		
			
				|  |  | +    b[7] * a[6] -
 | 
	
		
			
				|  |  | +    b[6] * a[7],
 | 
	
		
			
				|  |  | +  b[2] * a[0] + b[0] * a[2] - b[6] * a[3] + b[3] * a[6],
 | 
	
		
			
				|  |  | +  b[3] * a[0] + b[6] * a[2] + b[0] * a[3] - b[2] * a[6],
 | 
	
		
			
				|  |  | +  b[4] * a[0] + b[7] * a[3] + b[0] * a[4] + b[3] * a[7],
 | 
	
		
			
				|  |  | +  b[5] * a[0] + b[7] * a[2] + b[0] * a[5] + b[2] * a[7],
 | 
	
		
			
				|  |  | +  b[6] * a[0] + b[0] * a[6],
 | 
	
		
			
				|  |  | +  b[7] * a[0] + b[0] * a[7],
 | 
	
		
			
				|  |  | +];
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -export function norm(a: NVector): number {
 | 
	
		
			
				|  |  | -  return Math.sqrt(
 | 
	
		
			
				|  |  | -    Math.abs(a[0] * a[0] - a[2] * a[2] - a[3] * a[3] + a[6] * a[6]),
 | 
	
		
			
				|  |  | -  );
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +export const norm = (a: NVector): number =>
 | 
	
		
			
				|  |  | +  Math.sqrt(Math.abs(a[0] * a[0] - a[2] * a[2] - a[3] * a[3] + a[6] * a[6]));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -export function inorm(a: NVector): number {
 | 
	
		
			
				|  |  | -  return Math.sqrt(
 | 
	
		
			
				|  |  | -    Math.abs(a[7] * a[7] - a[5] * a[5] - a[4] * a[4] + a[1] * a[1]),
 | 
	
		
			
				|  |  | -  );
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +export const inorm = (a: NVector): number =>
 | 
	
		
			
				|  |  | +  Math.sqrt(Math.abs(a[7] * a[7] - a[5] * a[5] - a[4] * a[4] + a[1] * a[1]));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -export function normalized(a: NVector): NVector {
 | 
	
		
			
				|  |  | +export const normalized = (a: NVector): NVector => {
 | 
	
		
			
				|  |  |    const n = norm(a);
 | 
	
		
			
				|  |  |    if (n === 0 || n === 1) {
 | 
	
		
			
				|  |  |      return a;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |    const sign = a[6] < 0 ? -1 : 1;
 | 
	
		
			
				|  |  |    return mul(a, sign / n);
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -export function inormalized(a: NVector): NVector {
 | 
	
		
			
				|  |  | +export const inormalized = (a: NVector): NVector => {
 | 
	
		
			
				|  |  |    const n = inorm(a);
 | 
	
		
			
				|  |  |    if (n === 0 || n === 1) {
 | 
	
		
			
				|  |  |      return a;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |    return mul(a, 1 / n);
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -function isNumber(a: any): a is number {
 | 
	
		
			
				|  |  | -  return typeof a === "number";
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +const isNumber = (a: any): a is number => typeof a === "number";
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  export const E0: NVector = nvector(1, 1);
 | 
	
		
			
				|  |  |  export const E1: NVector = nvector(1, 2);
 |