{"version":3,"file":"Matrix2d.mjs","sources":["../../src/proj2d/Matrix2d.ts"],"sourcesContent":["/* eslint-disable no-mixed-operators,max-statements-per-line */\r\n// according to https://jsperf.com/obj-vs-array-view-access/1 , Float64Array is the best here\r\nimport { IPointData, Matrix, Point } from '@pixi/math';\r\nimport { AFFINE } from '../base';\r\n\r\nconst mat3id = [1, 0, 0, 0, 1, 0, 0, 0, 1];\r\n\r\nexport class Matrix2d\r\n{\r\n    /**\r\n     * A default (identity) matrix\r\n     *\r\n     * @static\r\n     * @const\r\n     */\r\n    static readonly IDENTITY = new Matrix2d();\r\n\r\n    /**\r\n     * A temp matrix\r\n     *\r\n     * @static\r\n     * @const\r\n     */\r\n    static readonly TEMP_MATRIX = new Matrix2d();\r\n\r\n    /**\r\n     * mat3 implementation through array of 9 elements\r\n     */\r\n    mat3: Float64Array;\r\n\r\n    floatArray: Float32Array = null;\r\n\r\n    constructor(backingArray?: ArrayLike<number>)\r\n    {\r\n        this.mat3 = new Float64Array(backingArray || mat3id);\r\n    }\r\n\r\n    get a(): number\r\n    {\r\n        return this.mat3[0] / this.mat3[8];\r\n    }\r\n\r\n    set a(value: number)\r\n    {\r\n        this.mat3[0] = value * this.mat3[8];\r\n    }\r\n\r\n    get b(): number\r\n    {\r\n        return this.mat3[1] / this.mat3[8];\r\n    }\r\n\r\n    set b(value: number)\r\n    {\r\n        this.mat3[1] = value * this.mat3[8];\r\n    }\r\n\r\n    get c(): number\r\n    {\r\n        return this.mat3[3] / this.mat3[8];\r\n    }\r\n\r\n    set c(value: number)\r\n    {\r\n        this.mat3[3] = value * this.mat3[8];\r\n    }\r\n\r\n    get d(): number\r\n    {\r\n        return this.mat3[4] / this.mat3[8];\r\n    }\r\n\r\n    set d(value: number)\r\n    {\r\n        this.mat3[4] = value * this.mat3[8];\r\n    }\r\n\r\n    get tx(): number\r\n    {\r\n        return this.mat3[6] / this.mat3[8];\r\n    }\r\n\r\n    set tx(value: number)\r\n    {\r\n        this.mat3[6] = value * this.mat3[8];\r\n    }\r\n\r\n    get ty(): number\r\n    {\r\n        return this.mat3[7] / this.mat3[8];\r\n    }\r\n\r\n    set ty(value: number)\r\n    {\r\n        this.mat3[7] = value * this.mat3[8];\r\n    }\r\n\r\n    set(a: number, b: number, c: number, d: number, tx: number, ty: number): this\r\n    {\r\n        const mat3 = this.mat3;\r\n\r\n        mat3[0] = a;\r\n        mat3[1] = b;\r\n        mat3[2] = 0;\r\n        mat3[3] = c;\r\n        mat3[4] = d;\r\n        mat3[5] = 0;\r\n        mat3[6] = tx;\r\n        mat3[7] = ty;\r\n        mat3[8] = 1;\r\n\r\n        return this;\r\n    }\r\n\r\n    toArray(transpose?: boolean, out?: Float32Array): Float32Array\r\n    {\r\n        if (!this.floatArray)\r\n        {\r\n            this.floatArray = new Float32Array(9);\r\n        }\r\n\r\n        const array = out || this.floatArray;\r\n        const mat3 = this.mat3;\r\n\r\n        if (transpose)\r\n        {\r\n            array[0] = mat3[0];\r\n            array[1] = mat3[1];\r\n            array[2] = mat3[2];\r\n            array[3] = mat3[3];\r\n            array[4] = mat3[4];\r\n            array[5] = mat3[5];\r\n            array[6] = mat3[6];\r\n            array[7] = mat3[7];\r\n            array[8] = mat3[8];\r\n        }\r\n        else\r\n        {\r\n            // this branch is NEVER USED in pixi\r\n            array[0] = mat3[0];\r\n            array[1] = mat3[3];\r\n            array[2] = mat3[6];\r\n            array[3] = mat3[1];\r\n            array[4] = mat3[4];\r\n            array[5] = mat3[7];\r\n            array[6] = mat3[2];\r\n            array[7] = mat3[5];\r\n            array[8] = mat3[8];\r\n        }\r\n\r\n        return array;\r\n    }\r\n\r\n    // TODO: remove props\r\n    apply(pos: IPointData, newPos: IPointData): IPointData\r\n    {\r\n        newPos = newPos || new Point();\r\n\r\n        const mat3 = this.mat3;\r\n        const x = pos.x;\r\n        const y = pos.y;\r\n\r\n        const z = 1.0 / (mat3[2] * x + mat3[5] * y + mat3[8]);\r\n\r\n        newPos.x = z * (mat3[0] * x + mat3[3] * y + mat3[6]);\r\n        newPos.y = z * (mat3[1] * x + mat3[4] * y + mat3[7]);\r\n\r\n        return newPos;\r\n    }\r\n\r\n    translate(tx: number, ty: number): this\r\n    {\r\n        const mat3 = this.mat3;\r\n\r\n        mat3[0] += tx * mat3[2];\r\n        mat3[1] += ty * mat3[2];\r\n        mat3[3] += tx * mat3[5];\r\n        mat3[4] += ty * mat3[5];\r\n        mat3[6] += tx * mat3[8];\r\n        mat3[7] += ty * mat3[8];\r\n\r\n        return this;\r\n    }\r\n\r\n    scale(x: number, y: number): this\r\n    {\r\n        const mat3 = this.mat3;\r\n\r\n        mat3[0] *= x;\r\n        mat3[1] *= y;\r\n        mat3[3] *= x;\r\n        mat3[4] *= y;\r\n        mat3[6] *= x;\r\n        mat3[7] *= y;\r\n\r\n        return this;\r\n    }\r\n\r\n    scaleAndTranslate(scaleX: number, scaleY: number, tx: number, ty: number): void\r\n    {\r\n        const mat3 = this.mat3;\r\n\r\n        mat3[0] = scaleX * mat3[0] + tx * mat3[2];\r\n        mat3[1] = scaleY * mat3[1] + ty * mat3[2];\r\n        mat3[3] = scaleX * mat3[3] + tx * mat3[5];\r\n        mat3[4] = scaleY * mat3[4] + ty * mat3[5];\r\n        mat3[6] = scaleX * mat3[6] + tx * mat3[8];\r\n        mat3[7] = scaleY * mat3[7] + ty * mat3[8];\r\n    }\r\n\r\n    // TODO: remove props\r\n    applyInverse(pos: IPointData, newPos: IPointData): IPointData\r\n    {\r\n        newPos = newPos || new Point();\r\n\r\n        const a = this.mat3;\r\n        const x = pos.x;\r\n        const y = pos.y;\r\n\r\n        const a00 = a[0]; const a01 = a[3]; const a02 = a[6];\r\n        const a10 = a[1]; const a11 = a[4]; const a12 = a[7];\r\n        const a20 = a[2]; const a21 = a[5]; const\r\n            a22 = a[8];\r\n\r\n        const newX = (a22 * a11 - a12 * a21) * x + (-a22 * a01 + a02 * a21) * y + (a12 * a01 - a02 * a11);\r\n        const newY = (-a22 * a10 + a12 * a20) * x + (a22 * a00 - a02 * a20) * y + (-a12 * a00 + a02 * a10);\r\n        const newZ = (a21 * a10 - a11 * a20) * x + (-a21 * a00 + a01 * a20) * y + (a11 * a00 - a01 * a10);\r\n\r\n        newPos.x = newX / newZ;\r\n        newPos.y = newY / newZ;\r\n\r\n        return newPos;\r\n    }\r\n\r\n    invert(): Matrix2d\r\n    {\r\n        const a = this.mat3;\r\n\r\n        const a00 = a[0]; const a01 = a[1]; const a02 = a[2];\r\n        const a10 = a[3]; const a11 = a[4]; const a12 = a[5];\r\n        const a20 = a[6]; const a21 = a[7]; const a22 = a[8];\r\n\r\n        const b01 = a22 * a11 - a12 * a21;\r\n        const b11 = -a22 * a10 + a12 * a20;\r\n        const b21 = a21 * a10 - a11 * a20;\r\n\r\n        // Calculate the determinant\r\n        let det = a00 * b01 + a01 * b11 + a02 * b21;\r\n\r\n        if (!det)\r\n        {\r\n            return this;\r\n        }\r\n        det = 1.0 / det;\r\n\r\n        a[0] = b01 * det;\r\n        a[1] = (-a22 * a01 + a02 * a21) * det;\r\n        a[2] = (a12 * a01 - a02 * a11) * det;\r\n        a[3] = b11 * det;\r\n        a[4] = (a22 * a00 - a02 * a20) * det;\r\n        a[5] = (-a12 * a00 + a02 * a10) * det;\r\n        a[6] = b21 * det;\r\n        a[7] = (-a21 * a00 + a01 * a20) * det;\r\n        a[8] = (a11 * a00 - a01 * a10) * det;\r\n\r\n        return this;\r\n    }\r\n\r\n    identity(): Matrix2d\r\n    {\r\n        const mat3 = this.mat3;\r\n\r\n        mat3[0] = 1;\r\n        mat3[1] = 0;\r\n        mat3[2] = 0;\r\n        mat3[3] = 0;\r\n        mat3[4] = 1;\r\n        mat3[5] = 0;\r\n        mat3[6] = 0;\r\n        mat3[7] = 0;\r\n        mat3[8] = 1;\r\n\r\n        return this;\r\n    }\r\n\r\n    clone(): Matrix2d\r\n    {\r\n        return new Matrix2d(this.mat3);\r\n    }\r\n\r\n    copyTo2dOr3d(matrix: Matrix2d): Matrix2d\r\n    {\r\n        const mat3 = this.mat3;\r\n        const ar2 = matrix.mat3;\r\n\r\n        ar2[0] = mat3[0];\r\n        ar2[1] = mat3[1];\r\n        ar2[2] = mat3[2];\r\n        ar2[3] = mat3[3];\r\n        ar2[4] = mat3[4];\r\n        ar2[5] = mat3[5];\r\n        ar2[6] = mat3[6];\r\n        ar2[7] = mat3[7];\r\n        ar2[8] = mat3[8];\r\n\r\n        return matrix;\r\n    }\r\n\r\n    /**\r\n     * legacy method, change the values of given pixi matrix\r\n     * @param matrix\r\n     * @param affine\r\n     * @param preserveOrientation\r\n     * @return matrix\r\n     */\r\n    copyTo(matrix: Matrix, affine?: AFFINE, preserveOrientation?: boolean): Matrix\r\n    {\r\n        const mat3 = this.mat3;\r\n        const d = 1.0 / mat3[8];\r\n        const tx = mat3[6] * d; const\r\n            ty = mat3[7] * d;\r\n\r\n        matrix.a = (mat3[0] - mat3[2] * tx) * d;\r\n        matrix.b = (mat3[1] - mat3[2] * ty) * d;\r\n        matrix.c = (mat3[3] - mat3[5] * tx) * d;\r\n        matrix.d = (mat3[4] - mat3[5] * ty) * d;\r\n        matrix.tx = tx;\r\n        matrix.ty = ty;\r\n\r\n        if (affine >= 2)\r\n        {\r\n            let D = matrix.a * matrix.d - matrix.b * matrix.c;\r\n\r\n            if (!preserveOrientation)\r\n            {\r\n                D = Math.abs(D);\r\n            }\r\n            if (affine === AFFINE.POINT)\r\n            {\r\n                if (D > 0)\r\n                {\r\n                    D = 1;\r\n                }\r\n                else D = -1;\r\n                matrix.a = D;\r\n                matrix.b = 0;\r\n                matrix.c = 0;\r\n                matrix.d = D;\r\n            }\r\n            else if (affine === AFFINE.AXIS_X)\r\n            {\r\n                D /= Math.sqrt(matrix.b * matrix.b + matrix.d * matrix.d);\r\n                matrix.c = 0;\r\n                matrix.d = D;\r\n            }\r\n            else if (affine === AFFINE.AXIS_Y)\r\n            {\r\n                D /= Math.sqrt(matrix.a * matrix.a + matrix.c * matrix.c);\r\n                matrix.a = D;\r\n                matrix.c = 0;\r\n            }\r\n            else if (affine === AFFINE.AXIS_XR)\r\n            {\r\n                matrix.a = matrix.d * D;\r\n                matrix.c = -matrix.b * D;\r\n            }\r\n        }\r\n\r\n        return matrix;\r\n    }\r\n\r\n    /**\r\n     * legacy method, change the values of given pixi matrix\r\n     * @param matrix\r\n     * @return\r\n     */\r\n    copyFrom(matrix: Matrix): this\r\n    {\r\n        const mat3 = this.mat3;\r\n\r\n        mat3[0] = matrix.a;\r\n        mat3[1] = matrix.b;\r\n        mat3[2] = 0;\r\n        mat3[3] = matrix.c;\r\n        mat3[4] = matrix.d;\r\n        mat3[5] = 0;\r\n        mat3[6] = matrix.tx;\r\n        mat3[7] = matrix.ty;\r\n        mat3[8] = 1.0;\r\n\r\n        return this;\r\n    }\r\n\r\n    setToMultLegacy(pt: Matrix, lt: Matrix2d): this\r\n    {\r\n        const out = this.mat3;\r\n        const b = lt.mat3;\r\n\r\n        const a00 = pt.a; const a01 = pt.b;\r\n        const a10 = pt.c; const a11 = pt.d;\r\n        const a20 = pt.tx; const a21 = pt.ty;\r\n\r\n        const b00 = b[0]; const b01 = b[1]; const b02 = b[2];\r\n        const b10 = b[3]; const b11 = b[4]; const b12 = b[5];\r\n        const b20 = b[6]; const b21 = b[7]; const\r\n            b22 = b[8];\r\n\r\n        out[0] = b00 * a00 + b01 * a10 + b02 * a20;\r\n        out[1] = b00 * a01 + b01 * a11 + b02 * a21;\r\n        out[2] = b02;\r\n\r\n        out[3] = b10 * a00 + b11 * a10 + b12 * a20;\r\n        out[4] = b10 * a01 + b11 * a11 + b12 * a21;\r\n        out[5] = b12;\r\n\r\n        out[6] = b20 * a00 + b21 * a10 + b22 * a20;\r\n        out[7] = b20 * a01 + b21 * a11 + b22 * a21;\r\n        out[8] = b22;\r\n\r\n        return this;\r\n    }\r\n\r\n    setToMultLegacy2(pt: Matrix2d, lt: Matrix): this\r\n    {\r\n        const out = this.mat3;\r\n        const a = pt.mat3;\r\n\r\n        const a00 = a[0]; const a01 = a[1]; const a02 = a[2];\r\n        const a10 = a[3]; const a11 = a[4]; const a12 = a[5];\r\n        const a20 = a[6]; const a21 = a[7]; const a22 = a[8];\r\n\r\n        const b00 = lt.a; const b01 = lt.b;\r\n        const b10 = lt.c; const b11 = lt.d;\r\n        const b20 = lt.tx; const\r\n            b21 = lt.ty;\r\n\r\n        out[0] = b00 * a00 + b01 * a10;\r\n        out[1] = b00 * a01 + b01 * a11;\r\n        out[2] = b00 * a02 + b01 * a12;\r\n\r\n        out[3] = b10 * a00 + b11 * a10;\r\n        out[4] = b10 * a01 + b11 * a11;\r\n        out[5] = b10 * a02 + b11 * a12;\r\n\r\n        out[6] = b20 * a00 + b21 * a10 + a20;\r\n        out[7] = b20 * a01 + b21 * a11 + a21;\r\n        out[8] = b20 * a02 + b21 * a12 + a22;\r\n\r\n        return this;\r\n    }\r\n\r\n    // that's transform multiplication we use\r\n    setToMult(pt: Matrix2d, lt: Matrix2d): this\r\n    {\r\n        const out = this.mat3;\r\n        const a = pt.mat3; const\r\n            b = lt.mat3;\r\n\r\n        const a00 = a[0]; const a01 = a[1]; const a02 = a[2];\r\n        const a10 = a[3]; const a11 = a[4]; const a12 = a[5];\r\n        const a20 = a[6]; const a21 = a[7]; const a22 = a[8];\r\n\r\n        const b00 = b[0]; const b01 = b[1]; const b02 = b[2];\r\n        const b10 = b[3]; const b11 = b[4]; const b12 = b[5];\r\n        const b20 = b[6]; const b21 = b[7]; const\r\n            b22 = b[8];\r\n\r\n        out[0] = b00 * a00 + b01 * a10 + b02 * a20;\r\n        out[1] = b00 * a01 + b01 * a11 + b02 * a21;\r\n        out[2] = b00 * a02 + b01 * a12 + b02 * a22;\r\n\r\n        out[3] = b10 * a00 + b11 * a10 + b12 * a20;\r\n        out[4] = b10 * a01 + b11 * a11 + b12 * a21;\r\n        out[5] = b10 * a02 + b11 * a12 + b12 * a22;\r\n\r\n        out[6] = b20 * a00 + b21 * a10 + b22 * a20;\r\n        out[7] = b20 * a01 + b21 * a11 + b22 * a21;\r\n        out[8] = b20 * a02 + b21 * a12 + b22 * a22;\r\n\r\n        return this;\r\n    }\r\n\r\n    // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\r\n    prepend(lt: any): this\r\n    {\r\n        if (lt.mat3)\r\n        {\r\n            return this.setToMult(lt, this);\r\n        }\r\n\r\n        return this.setToMultLegacy(lt, this);\r\n    }\r\n}\r\n"],"names":[],"mappings":"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"}