nudged icon indicating copy to clipboard operation
nudged copied to clipboard

TypeScript type declarations

Open janne-slamcore opened this issue 2 years ago • 1 comments

Simple standalone type declarations.

Fixes #29

janne-slamcore avatar Mar 28 '24 10:03 janne-slamcore

Wish I saw this before I made my own, oops :D Not sure if it helps...

// Type definitions for nudged (https://github.com/axelpale/nudged)
// API docs: https://github.com/axelpale/nudged/blob/master/doc/API.md

declare module "nudged" {
  export interface Point {
    x: number;
    y: number;
  }

  export interface Transform {
    a: number;
    b: number;
    x: number;
    y: number;
  }

  export function estimate(parameters: EstimateParameters): Transform;

  export namespace estimators {
    function I(): Transform;
    function L(domain: Point[], range: Point[], angle: number): Transform;
    function X(domain: Point[], range: Point[]): Transform;
    function Y(domain: Point[], range: Point[]): Transform;
    function T(domain: Point[], range: Point[]): Transform;
    function S(domain: Point[], range: Point[], center: Point): Transform;
    function R(domain: Point[], range: Point[], center: Point): Transform;
    function TS(domain: Point[], range: Point[]): Transform;
    function TR(domain: Point[], range: Point[]): Transform;
    function SR(domain: Point[], range: Point[], center: Point): Transform;
    function TSR(domain: Point[], range: Point[]): Transform;
  }

  export namespace point {
    function almostEqual(p: Point, q: Point, tolerance?: number): boolean;
    function create(x: number, y: number): Point;
    function distance(p: Point, q: Point): number;
    function equal(p: Point, q: Point): boolean;
    function fromArray(arrp: [number, number]): Point;
    function offset(p: Point, dx: number, dy: number): Point;
    function polarOffset(p: Point, distance: number, angle: number): Point;
    function toArray(p: Point): [number, number];
    function transform(p: Point, tr: Transform): Point;
    function transformMany(points: Point[], tr: Transform): Point[];
    function validate(p: Point): boolean;
  }

  export namespace transform {
    const SINGULAR: Transform;
    const IDENTITY: Transform;
    const ROT45: Transform;
    const ROT90: Transform;
    const ROT180: Transform;
    const ROT270: Transform;
    const HALF: Transform;
    const X2: Transform;

    function almostEqual(
      tr: Transform,
      ts: Transform,
      tolerance?: number,
    ): boolean;
    function compose(tr: Transform, ts: Transform): Transform;
    function create(a: number, b: number, x: number, y: number): Transform;
    function equal(tr: Transform, ts: Transform): boolean;
    function fromArray(arrtr: [number, number, number, number]): Transform;
    function fromPolar(
      center: Point,
      scale: number,
      rotation: number,
    ): Transform;
    function fromRotation(center: Point, radians: number): Transform;
    function fromScale(center: Point, multiplier: number): Transform;
    function fromString(string: string): Transform;
    function fromTranslation(p: Point): Transform;
    function getRotation(tr: Transform): number;
    function getScale(tr: Transform): number;
    function getTranslation(tr: Transform): Point;
    function multiply(tr: Transform, ts: Transform): Transform;
    function inverse(tr: Transform): Transform;
    function rotateBy(tr: Transform, center: Point, radians: number): Transform;
    function rotateTo(tr: Transform, center: Point, radians: number): Transform;
    function scaleBy(
      tr: Transform,
      center: Point,
      multiplier: number,
    ): Transform;
    function scaleTo(tr: Transform, center: Point, scale: number): Transform;
    function toArray(tr: Transform): [number, number, number, number];
    function toMatrix(tr: Transform): {
      a: number;
      b: number;
      c: number;
      d: number;
      e: number;
      f: number;
    };
    function toString(tr: TrandomainTransform, point: Point): Transform;
    function validate(tr: Transform): boolean;
  }

  export namespace analysis {
    function mse(tr: Transform, domain: Point[], range: Point[]): number;
    function residuals(
      tr: Transform,
      domain: Point[],
      range: Point[],
    ): number[];
    function rss(tr: Transform, domain: Point[], range: Point[]): number;
  }

  export const tolerance: number;
  export const version: string;
}

nightgrey avatar May 06 '24 15:05 nightgrey