UNPKG

@lucania/vectorics

Version:
47 lines (46 loc) 2.1 kB
import { Tuple2, Tuple3, Tuple4 } from "./Vector"; export type Tuple2x2 = [...Tuple2, ...Tuple2]; export type Tuple3x3 = [...Tuple3, ...Tuple3, ...Tuple3]; export type Tuple4x4 = [...Tuple4, ...Tuple4, ...Tuple4, ...Tuple4]; export type TupleNxN = Tuple2x2 | Tuple3x3 | Tuple4x4 | number[]; export type MatrixSource<Tuple extends TupleNxN> = number | Tuple | Matrix<Tuple>; export declare class Matrix<Tuple extends TupleNxN> { data: Tuple; readonly size: number; constructor(...data: Tuple); add(scalar: number): this; add(matrix: Matrix<Tuple>): this; add(tuple: Tuple): this; subtract(scalar: number): this; subtract(matrix: Matrix<Tuple>): this; subtract(tuple: Tuple): this; multiply(scalar: number): this; multiply(matrix: Matrix<Tuple>): this; multiply(tuple: Tuple): this; divide(scalar: number): this; divide(matrix: Matrix<Tuple>): this; divide(tuple: Tuple): this; transpose(): void; clone(): Matrix<Tuple>; private _tuple; } export declare class Matrix2 extends Matrix<Tuple2x2> { } export declare class Matrix3 extends Matrix<Tuple3x3> { } export declare class Matrix4 extends Matrix<Tuple4x4> { } export declare namespace MatrixToolbox { function tuple<Tuple extends TupleNxN>(size: Tuple["length"], source: MatrixSource<Tuple>): Tuple; function fromSource<Tuple extends Tuple2x2>(size: 4, source: MatrixSource<Tuple>): Matrix2; function fromSource<Tuple extends Tuple3x3>(size: 9, source: MatrixSource<Tuple>): Matrix3; function fromSource<Tuple extends Tuple4x4>(size: 16, source: MatrixSource<Tuple>): Matrix4; namespace Projection { function orthographic(left: number, right: number, bottom: number, top: number, near: number, far: number): Matrix4; } namespace Transformation { function translate(translationX: number, translationY: number, translationZ: number): Matrix4; function rotate(angleInDegrees: number, axisX: number, axisY: number, axisZ: number): Matrix4; function scale(scaleX: number, scaleY: number, scaleZ: number): Matrix4; } }