|
@@ -0,0 +1,596 @@
|
|
|
+/*
|
|
|
+ * ********************************************************************************************************************
|
|
|
+ *
|
|
|
+ * iFHS7.
|
|
|
+ * ;BBMBMBMc rZMBMBR BMB
|
|
|
+ * MBEr:;PBM, 7MBMMEOBB: BBB RBW
|
|
|
+ * XK: BO SB. :SZ MBM. c;; ir BBM :FFr :SSF: ;xBMB:r iuGXv. i:. iF2;
|
|
|
+ * DBBM0r. :D S7 ;XMBMB GMBMu. MBM: BMB MBMBBBMBMS WMBMBMBBK MBMBMBM BMBRBMBW .MBMBMBMBB
|
|
|
+ * :JMRMMD .. , 1MMRM1; ;MBMBBR: MBM ;MB: BMB: MBM. RMBr sBMH BM0 UMB, BMB. KMBv
|
|
|
+ * ;. XOW B1; :uM: 1RE, i .2BMBs rMB. MBO MBO JMB; MBB MBM BBS 7MBMBOBM: MBW :BMc
|
|
|
+ * OBRJ.SEE MRDOWOR, 3DE:7OBM . ;BMB RMR7BM BMB MBB. BMB ,BMR .BBZ MMB rMB, BMM rMB7
|
|
|
+ * :FBRO0D0 RKXSXPR. JOKOOMPi BMBSSWBMB; BMBB: MBMB0ZMBMS .BMBOXRBMB MBMDE RBM2;SMBM; MBB xBM2
|
|
|
+ * iZGE O0SHSPO. uGZ7. sBMBMBDL :BMO OZu:BMBK, rRBMB0; ,EBMB xBMBr:ER. RDU :OO;
|
|
|
+ * ,BZ, 1D0 RPSFHXR. xWZ .SMr . .BBB
|
|
|
+ * :0BMRDG RESSSKR. 2WOMBW; BMBMR
|
|
|
+ * i0BM: SWKHKGO MBDv
|
|
|
+ * .UB OOGDM. MK, Copyright (c) 2015-2020. 斯伯坦机器人
|
|
|
+ * , XMW ..
|
|
|
+ * r All rights reserved.
|
|
|
+ *
|
|
|
+ * ********************************************************************************************************************
|
|
|
+ */
|
|
|
+
|
|
|
+/**
|
|
|
+ * 变换矩阵
|
|
|
+ *
|
|
|
+ * @author 庞利祥 <sybotan@126.com>
|
|
|
+ */
|
|
|
+export class SMatrix {
|
|
|
+ m11 = 1;
|
|
|
+ m21 = 0;
|
|
|
+ m31 = 0;
|
|
|
+ m41 = 0;
|
|
|
+
|
|
|
+ m12 = 0;
|
|
|
+ m22 = 1;
|
|
|
+ m32 = 0;
|
|
|
+ m42 = 0;
|
|
|
+
|
|
|
+ m13 = 0;
|
|
|
+ m23 = 0;
|
|
|
+ m33 = 1;
|
|
|
+ m43 = 0;
|
|
|
+
|
|
|
+ m14 = 0;
|
|
|
+ m24 = 0;
|
|
|
+ m34 = 0;
|
|
|
+ m44 = 1;
|
|
|
+
|
|
|
+ /** x轴方向的缩放比例 */
|
|
|
+ get a(): number {
|
|
|
+ return this.m11;
|
|
|
+ } //
|
|
|
+ set a(v: number) {
|
|
|
+ this.m11 = v;
|
|
|
+ }
|
|
|
+ /** x轴方向斜切 */
|
|
|
+ get b(): number {
|
|
|
+ return this.m12;
|
|
|
+ }
|
|
|
+ set b(v: number) {
|
|
|
+ this.m12 = v;
|
|
|
+ }
|
|
|
+ /** y轴方向斜切 */
|
|
|
+ get c(): number {
|
|
|
+ return this.m21;
|
|
|
+ }
|
|
|
+ set c(v: number) {
|
|
|
+ this.m21 = v;
|
|
|
+ }
|
|
|
+ /** y轴方向缩放比例 */
|
|
|
+ get d(): number {
|
|
|
+ return this.m22;
|
|
|
+ }
|
|
|
+ set d(v: number) {
|
|
|
+ this.m22 = v;
|
|
|
+ }
|
|
|
+ /** x轴方向平移 */
|
|
|
+ get e(): number {
|
|
|
+ return this.m41;
|
|
|
+ }
|
|
|
+ set e(v: number) {
|
|
|
+ this.m41 = v;
|
|
|
+ }
|
|
|
+ /** y轴方向平移 */
|
|
|
+ get f(): number {
|
|
|
+ return this.m42;
|
|
|
+ }
|
|
|
+ set f(v: number) {
|
|
|
+ this.m42 = v;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 是否为 2D 矩阵
|
|
|
+ */
|
|
|
+ get is2D(): boolean {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 是否为单位矩阵
|
|
|
+ */
|
|
|
+ get isIdentity(): boolean {
|
|
|
+ return (
|
|
|
+ this.m11 == 1 &&
|
|
|
+ this.m21 == 0 &&
|
|
|
+ this.m31 == 0 &&
|
|
|
+ this.m41 == 0 &&
|
|
|
+ this.m12 == 0 &&
|
|
|
+ this.m22 == 1 &&
|
|
|
+ this.m32 == 0 &&
|
|
|
+ this.m42 == 0 &&
|
|
|
+ this.m13 == 0 &&
|
|
|
+ this.m23 == 0 &&
|
|
|
+ this.m33 == 1 &&
|
|
|
+ this.m43 == 0 &&
|
|
|
+ this.m14 == 0 &&
|
|
|
+ this.m24 == 0 &&
|
|
|
+ this.m34 == 0 &&
|
|
|
+ this.m44 == 1
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ // /**
|
|
|
+ // * 构造函数
|
|
|
+ // */
|
|
|
+ // constructor() {}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 重置变换矩阵
|
|
|
+ *
|
|
|
+ * @return 返回自身
|
|
|
+ */
|
|
|
+ reset(): SMatrix {
|
|
|
+ this.m11 = 1;
|
|
|
+ this.m21 = 0;
|
|
|
+ this.m31 = 0;
|
|
|
+ this.m41 = 0;
|
|
|
+
|
|
|
+ this.m12 = 0;
|
|
|
+ this.m22 = 1;
|
|
|
+ this.m32 = 0;
|
|
|
+ this.m42 = 0;
|
|
|
+
|
|
|
+ this.m13 = 0;
|
|
|
+ this.m23 = 0;
|
|
|
+ this.m33 = 1;
|
|
|
+ this.m43 = 0;
|
|
|
+
|
|
|
+ this.m14 = 0;
|
|
|
+ this.m24 = 0;
|
|
|
+ this.m34 = 0;
|
|
|
+ this.m44 = 1;
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 原始矩阵乘以给定的变换矩阵
|
|
|
+ *
|
|
|
+ * @param mat 给定的变换矩阵
|
|
|
+ * @return 返回自身
|
|
|
+ */
|
|
|
+ multiply(mat: SMatrix): SMatrix {
|
|
|
+ [
|
|
|
+ this.m11,
|
|
|
+ this.m21,
|
|
|
+ this.m31,
|
|
|
+ this.m41,
|
|
|
+
|
|
|
+ this.m12,
|
|
|
+ this.m22,
|
|
|
+ this.m32,
|
|
|
+ this.m42,
|
|
|
+
|
|
|
+ this.m13,
|
|
|
+ this.m23,
|
|
|
+ this.m33,
|
|
|
+ this.m43,
|
|
|
+
|
|
|
+ this.m14,
|
|
|
+ this.m24,
|
|
|
+ this.m34,
|
|
|
+ this.m44
|
|
|
+ ] = [
|
|
|
+ this.m11 * mat.m11 +
|
|
|
+ this.m21 * mat.m12 +
|
|
|
+ this.m31 * mat.m13 +
|
|
|
+ this.m41 * mat.m14,
|
|
|
+ this.m11 * mat.m21 +
|
|
|
+ this.m21 * mat.m22 +
|
|
|
+ this.m31 * mat.m23 +
|
|
|
+ this.m41 * mat.m24,
|
|
|
+ this.m11 * mat.m31 +
|
|
|
+ this.m21 * mat.m32 +
|
|
|
+ this.m31 * mat.m33 +
|
|
|
+ this.m41 * mat.m34,
|
|
|
+ this.m11 * mat.m41 +
|
|
|
+ this.m21 * mat.m42 +
|
|
|
+ this.m31 * mat.m43 +
|
|
|
+ this.m41 * mat.m44,
|
|
|
+
|
|
|
+ this.m12 * mat.m11 +
|
|
|
+ this.m22 * mat.m12 +
|
|
|
+ this.m32 * mat.m13 +
|
|
|
+ this.m42 * mat.m14,
|
|
|
+ this.m12 * mat.m21 +
|
|
|
+ this.m22 * mat.m22 +
|
|
|
+ this.m32 * mat.m23 +
|
|
|
+ this.m42 * mat.m24,
|
|
|
+ this.m12 * mat.m31 +
|
|
|
+ this.m22 * mat.m32 +
|
|
|
+ this.m32 * mat.m33 +
|
|
|
+ this.m42 * mat.m34,
|
|
|
+ this.m12 * mat.m41 +
|
|
|
+ this.m22 * mat.m42 +
|
|
|
+ this.m32 * mat.m43 +
|
|
|
+ this.m42 * mat.m44,
|
|
|
+
|
|
|
+ this.m13 * mat.m11 +
|
|
|
+ this.m23 * mat.m12 +
|
|
|
+ this.m33 * mat.m13 +
|
|
|
+ this.m43 * mat.m14,
|
|
|
+ this.m13 * mat.m21 +
|
|
|
+ this.m23 * mat.m22 +
|
|
|
+ this.m33 * mat.m23 +
|
|
|
+ this.m43 * mat.m24,
|
|
|
+ this.m13 * mat.m31 +
|
|
|
+ this.m23 * mat.m32 +
|
|
|
+ this.m33 * mat.m33 +
|
|
|
+ this.m43 * mat.m34,
|
|
|
+ this.m13 * mat.m41 +
|
|
|
+ this.m23 * mat.m42 +
|
|
|
+ this.m33 * mat.m43 +
|
|
|
+ this.m43 * mat.m44,
|
|
|
+
|
|
|
+ this.m14 * mat.m11 +
|
|
|
+ this.m24 * mat.m12 +
|
|
|
+ this.m34 * mat.m13 +
|
|
|
+ this.m44 * mat.m14,
|
|
|
+ this.m14 * mat.m21 +
|
|
|
+ this.m24 * mat.m22 +
|
|
|
+ this.m34 * mat.m23 +
|
|
|
+ this.m44 * mat.m24,
|
|
|
+ this.m14 * mat.m31 +
|
|
|
+ this.m24 * mat.m32 +
|
|
|
+ this.m34 * mat.m33 +
|
|
|
+ this.m44 * mat.m34,
|
|
|
+ this.m14 * mat.m41 +
|
|
|
+ this.m24 * mat.m42 +
|
|
|
+ this.m34 * mat.m43 +
|
|
|
+ this.m44 * mat.m44
|
|
|
+ ];
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 位移变换
|
|
|
+ *
|
|
|
+ * @param dx X轴位移
|
|
|
+ * @param dy Y轴位移
|
|
|
+ * @param dz Z轴位移
|
|
|
+ * @return 返回自身
|
|
|
+ */
|
|
|
+ translate(dx: number, dy: number, dz = 0): SMatrix {
|
|
|
+ const mat = new SMatrix();
|
|
|
+ mat.m41 = dx;
|
|
|
+ mat.m42 = dy;
|
|
|
+ mat.m43 = dz;
|
|
|
+ this.multiply(mat);
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ // /**
|
|
|
+ // * 平移变换矩阵
|
|
|
+ // *
|
|
|
+ // * @param dx X轴位移
|
|
|
+ // * @param dy Y轴位移
|
|
|
+ // * @param dz Z轴位移
|
|
|
+ // * @return 返回平移变换矩阵
|
|
|
+ // */
|
|
|
+ // translated(dx: number, dy: number, dz = 0): SMatrix {
|
|
|
+ // const mat = new SMatrix();
|
|
|
+ // mat.m41 = dx;
|
|
|
+ // mat.m42 = dy;
|
|
|
+ // mat.m43 = dz;
|
|
|
+ // return mat;
|
|
|
+ // }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 缩放变换
|
|
|
+ *
|
|
|
+ * @param sx X轴缩放比例
|
|
|
+ * @param sy Y轴缩放比例
|
|
|
+ * @return 返回自身
|
|
|
+ */
|
|
|
+ scale(sx: number, sy: number): SMatrix {
|
|
|
+ const mat = new SMatrix();
|
|
|
+ mat.m11 = sx;
|
|
|
+ mat.m22 = sy;
|
|
|
+ this.multiply(mat);
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ // /**
|
|
|
+ // * 缩放变换矩阵
|
|
|
+ // *
|
|
|
+ // * @param sx X轴缩放比例
|
|
|
+ // * @param sy Y轴缩放比例
|
|
|
+ // * @return 返回缩放变换矩阵
|
|
|
+ // */
|
|
|
+ // scaled(sx: number, sy: number): SMatrix {
|
|
|
+ // const mat = new SMatrix();
|
|
|
+ // mat.m11 = sx;
|
|
|
+ // mat.m22 = sy;
|
|
|
+ // return mat;
|
|
|
+ // }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 旋转变形
|
|
|
+ *
|
|
|
+ * @param angle 绕 Z 轴旋转角度(单位角度度)
|
|
|
+ * @return 返回自身
|
|
|
+ */
|
|
|
+ rotate(angle: number): SMatrix;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 旋转变形
|
|
|
+ *
|
|
|
+ * @param rotX 绕 X 轴旋转角度(单位角度度)
|
|
|
+ * @param rotY 绕 X 轴旋转角度(单位角度度)
|
|
|
+ * @param rotZ 绕 X 轴旋转角度(单位角度度)
|
|
|
+ * @return 返回自身
|
|
|
+ */
|
|
|
+ rotate(rotX: number, rotY: number, rotZ: number): SMatrix;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 旋转变形
|
|
|
+ *
|
|
|
+ * @param rotX 绕 Z 轴旋转角度 | 绕 X 轴旋转角度(单位弧度)
|
|
|
+ * @param rotY 绕 X 轴旋转角度(单位弧度)
|
|
|
+ * @param rotZ 绕 X 轴旋转角度(单位弧度)
|
|
|
+ * @return 返回自身
|
|
|
+ */
|
|
|
+ rotate(rotX: number, rotY?: number, rotZ?: number): SMatrix {
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 转置当前矩阵
|
|
|
+ *
|
|
|
+ * @return 返回自身
|
|
|
+ */
|
|
|
+ transpose(): SMatrix {
|
|
|
+ [this.m12, this.m21] = [this.m21, this.m12];
|
|
|
+ [this.m13, this.m31] = [this.m31, this.m13];
|
|
|
+ [this.m14, this.m41] = [this.m41, this.m14];
|
|
|
+
|
|
|
+ [this.m23, this.m32] = [this.m32, this.m23];
|
|
|
+ [this.m24, this.m42] = [this.m42, this.m24];
|
|
|
+
|
|
|
+ [this.m34, this.m43] = [this.m43, this.m34];
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ // /**
|
|
|
+ // * 转置当前矩阵
|
|
|
+ // *
|
|
|
+ // * @return 返回自身
|
|
|
+ // */
|
|
|
+ // transposed(): SMatrix {
|
|
|
+ // const mat = new SMatrix();
|
|
|
+ // mat.m11 = this.m11;
|
|
|
+ // mat.m21 = this.m12;
|
|
|
+ // mat.m31 = this.m13;
|
|
|
+ // mat.m41 = this.m14;
|
|
|
+ //
|
|
|
+ // mat.m12 = this.m21;
|
|
|
+ // mat.m22 = this.m22;
|
|
|
+ // mat.m32 = this.m23;
|
|
|
+ // mat.m42 = this.m24;
|
|
|
+ //
|
|
|
+ // mat.m13 = this.m31;
|
|
|
+ // mat.m23 = this.m32;
|
|
|
+ // mat.m33 = this.m33;
|
|
|
+ // mat.m43 = this.m34;
|
|
|
+ //
|
|
|
+ // mat.m14 = this.m41;
|
|
|
+ // mat.m24 = this.m42;
|
|
|
+ // mat.m34 = this.m43;
|
|
|
+ // mat.m44 = this.m44;
|
|
|
+ //
|
|
|
+ // return mat;
|
|
|
+ // }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 返回当前矩阵的逆矩阵
|
|
|
+ *
|
|
|
+ * @return 当前矩阵的逆矩阵
|
|
|
+ * */
|
|
|
+ inversed(): SMatrix {
|
|
|
+ const detMat = this.det();
|
|
|
+ const d = this.value();
|
|
|
+ const ret = new SMatrix();
|
|
|
+ ret.m11 = detMat.m11 / d;
|
|
|
+ ret.m21 = detMat.m21 / d;
|
|
|
+ ret.m31 = detMat.m31 / d;
|
|
|
+ ret.m41 = detMat.m41 / d;
|
|
|
+
|
|
|
+ ret.m12 = detMat.m12 / d;
|
|
|
+ ret.m22 = detMat.m22 / d;
|
|
|
+ ret.m32 = detMat.m32 / d;
|
|
|
+ ret.m42 = detMat.m42 / d;
|
|
|
+
|
|
|
+ ret.m13 = detMat.m13 / d;
|
|
|
+ ret.m23 = detMat.m23 / d;
|
|
|
+ ret.m33 = detMat.m33 / d;
|
|
|
+ ret.m43 = detMat.m43 / d;
|
|
|
+
|
|
|
+ ret.m14 = detMat.m14 / d;
|
|
|
+ ret.m24 = detMat.m24 / d;
|
|
|
+ ret.m34 = detMat.m34 / d;
|
|
|
+ ret.m44 = detMat.m44 / d;
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 返回当前矩阵的伴随矩阵
|
|
|
+ *
|
|
|
+ * @return 当前矩阵的伴随矩阵
|
|
|
+ * */
|
|
|
+ det(): SMatrix {
|
|
|
+ const m = new SMatrix();
|
|
|
+ m.m11 =
|
|
|
+ this.m22 * this.m33 * this.m44 +
|
|
|
+ this.m32 * this.m43 * this.m24 +
|
|
|
+ this.m42 * this.m23 * this.m34 -
|
|
|
+ this.m42 * this.m33 * this.m24 -
|
|
|
+ this.m32 * this.m23 * this.m44 -
|
|
|
+ this.m22 * this.m43 * this.m34;
|
|
|
+ m.m12 = -(
|
|
|
+ this.m12 * this.m33 * this.m44 +
|
|
|
+ this.m32 * this.m43 * this.m14 +
|
|
|
+ this.m42 * this.m13 * this.m34 -
|
|
|
+ this.m42 * this.m33 * this.m14 -
|
|
|
+ this.m32 * this.m13 * this.m44 -
|
|
|
+ this.m12 * this.m43 * this.m34
|
|
|
+ );
|
|
|
+ m.m13 =
|
|
|
+ this.m12 * this.m23 * this.m44 +
|
|
|
+ this.m22 * this.m43 * this.m14 +
|
|
|
+ this.m42 * this.m13 * this.m24 -
|
|
|
+ this.m42 * this.m23 * this.m14 -
|
|
|
+ this.m22 * this.m13 * this.m44 -
|
|
|
+ this.m12 * this.m43 * this.m24;
|
|
|
+ m.m14 = -(
|
|
|
+ this.m12 * this.m23 * this.m34 +
|
|
|
+ this.m22 * this.m33 * this.m14 +
|
|
|
+ this.m32 * this.m13 * this.m24 -
|
|
|
+ this.m32 * this.m23 * this.m14 -
|
|
|
+ this.m22 * this.m13 * this.m34 -
|
|
|
+ this.m12 * this.m33 * this.m24
|
|
|
+ );
|
|
|
+
|
|
|
+ m.m21 = -(
|
|
|
+ this.m21 * this.m33 * this.m44 +
|
|
|
+ this.m31 * this.m43 * this.m24 +
|
|
|
+ this.m41 * this.m23 * this.m34 -
|
|
|
+ this.m41 * this.m33 * this.m24 -
|
|
|
+ this.m31 * this.m23 * this.m44 -
|
|
|
+ this.m21 * this.m43 * this.m34
|
|
|
+ );
|
|
|
+ m.m22 =
|
|
|
+ this.m11 * this.m33 * this.m44 +
|
|
|
+ this.m31 * this.m43 * this.m14 +
|
|
|
+ this.m41 * this.m13 * this.m34 -
|
|
|
+ this.m41 * this.m33 * this.m14 -
|
|
|
+ this.m31 * this.m13 * this.m44 -
|
|
|
+ this.m11 * this.m43 * this.m34;
|
|
|
+ m.m23 = -(
|
|
|
+ this.m11 * this.m23 * this.m44 +
|
|
|
+ this.m21 * this.m43 * this.m14 +
|
|
|
+ this.m41 * this.m13 * this.m24 -
|
|
|
+ this.m41 * this.m23 * this.m14 -
|
|
|
+ this.m21 * this.m13 * this.m44 -
|
|
|
+ this.m11 * this.m43 * this.m24
|
|
|
+ );
|
|
|
+ m.m24 =
|
|
|
+ this.m11 * this.m23 * this.m34 +
|
|
|
+ this.m21 * this.m33 * this.m14 +
|
|
|
+ this.m31 * this.m13 * this.m24 -
|
|
|
+ this.m31 * this.m23 * this.m14 -
|
|
|
+ this.m21 * this.m13 * this.m34 -
|
|
|
+ this.m11 * this.m33 * this.m24;
|
|
|
+
|
|
|
+ m.m31 =
|
|
|
+ this.m21 * this.m32 * this.m44 +
|
|
|
+ this.m31 * this.m42 * this.m24 +
|
|
|
+ this.m41 * this.m22 * this.m34 -
|
|
|
+ this.m41 * this.m32 * this.m24 -
|
|
|
+ this.m31 * this.m22 * this.m44 -
|
|
|
+ this.m21 * this.m42 * this.m34;
|
|
|
+ m.m32 = -(
|
|
|
+ this.m11 * this.m32 * this.m44 +
|
|
|
+ this.m31 * this.m42 * this.m14 +
|
|
|
+ this.m41 * this.m12 * this.m34 -
|
|
|
+ this.m41 * this.m32 * this.m14 -
|
|
|
+ this.m31 * this.m12 * this.m44 -
|
|
|
+ this.m11 * this.m42 * this.m34
|
|
|
+ );
|
|
|
+ m.m33 =
|
|
|
+ this.m11 * this.m22 * this.m44 +
|
|
|
+ this.m21 * this.m42 * this.m14 +
|
|
|
+ this.m41 * this.m12 * this.m24 -
|
|
|
+ this.m41 * this.m22 * this.m14 -
|
|
|
+ this.m21 * this.m12 * this.m44 -
|
|
|
+ this.m11 * this.m42 * this.m24;
|
|
|
+ m.m34 = -(
|
|
|
+ this.m11 * this.m22 * this.m34 +
|
|
|
+ this.m21 * this.m32 * this.m14 +
|
|
|
+ this.m31 * this.m12 * this.m24 -
|
|
|
+ this.m31 * this.m22 * this.m14 -
|
|
|
+ this.m21 * this.m12 * this.m34 -
|
|
|
+ this.m11 * this.m32 * this.m24
|
|
|
+ );
|
|
|
+
|
|
|
+ m.m41 = -(
|
|
|
+ this.m21 * this.m32 * this.m43 +
|
|
|
+ this.m31 * this.m42 * this.m23 +
|
|
|
+ this.m41 * this.m22 * this.m33 -
|
|
|
+ this.m41 * this.m32 * this.m23 -
|
|
|
+ this.m31 * this.m22 * this.m43 -
|
|
|
+ this.m21 * this.m42 * this.m33
|
|
|
+ );
|
|
|
+ m.m42 =
|
|
|
+ this.m11 * this.m32 * this.m43 +
|
|
|
+ this.m31 * this.m42 * this.m13 +
|
|
|
+ this.m41 * this.m12 * this.m33 -
|
|
|
+ this.m41 * this.m32 * this.m13 -
|
|
|
+ this.m31 * this.m12 * this.m43 -
|
|
|
+ this.m11 * this.m42 * this.m33;
|
|
|
+ m.m43 = -(
|
|
|
+ this.m11 * this.m22 * this.m43 +
|
|
|
+ this.m21 * this.m42 * this.m13 +
|
|
|
+ this.m41 * this.m12 * this.m23 -
|
|
|
+ this.m41 * this.m22 * this.m13 -
|
|
|
+ this.m21 * this.m12 * this.m43 -
|
|
|
+ this.m11 * this.m42 * this.m23
|
|
|
+ );
|
|
|
+ m.m44 =
|
|
|
+ this.m11 * this.m22 * this.m33 +
|
|
|
+ this.m21 * this.m32 * this.m13 +
|
|
|
+ this.m31 * this.m12 * this.m23 -
|
|
|
+ this.m31 * this.m22 * this.m13 -
|
|
|
+ this.m21 * this.m12 * this.m33 -
|
|
|
+ this.m11 * this.m32 * this.m23;
|
|
|
+ return m;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 返回当前矩阵的值
|
|
|
+ *
|
|
|
+ * @return 当前矩阵的值
|
|
|
+ * */
|
|
|
+ value(): number {
|
|
|
+ return (
|
|
|
+ this.m11 *
|
|
|
+ (this.m22 * this.m33 * this.m44 +
|
|
|
+ this.m32 * this.m43 * this.m24 +
|
|
|
+ this.m42 * this.m23 * this.m34 -
|
|
|
+ this.m42 * this.m33 * this.m24 -
|
|
|
+ this.m32 * this.m23 * this.m44 -
|
|
|
+ this.m22 * this.m43 * this.m34) -
|
|
|
+ this.m21 *
|
|
|
+ (this.m12 * this.m33 * this.m44 +
|
|
|
+ this.m32 * this.m43 * this.m14 +
|
|
|
+ this.m42 * this.m13 * this.m34 -
|
|
|
+ this.m42 * this.m33 * this.m14 -
|
|
|
+ this.m32 * this.m13 * this.m44 -
|
|
|
+ this.m12 * this.m43 * this.m34) +
|
|
|
+ this.m31 *
|
|
|
+ (this.m12 * this.m23 * this.m44 +
|
|
|
+ this.m22 * this.m43 * this.m14 +
|
|
|
+ this.m42 * this.m13 * this.m24 -
|
|
|
+ this.m42 * this.m23 * this.m14 -
|
|
|
+ this.m22 * this.m13 * this.m44 -
|
|
|
+ this.m12 * this.m43 * this.m24) -
|
|
|
+ this.m41 *
|
|
|
+ (this.m12 * this.m23 * this.m34 +
|
|
|
+ this.m22 * this.m33 * this.m14 +
|
|
|
+ this.m32 * this.m13 * this.m24 -
|
|
|
+ this.m32 * this.m23 * this.m14 -
|
|
|
+ this.m22 * this.m13 * this.m34 -
|
|
|
+ this.m12 * this.m33 * this.m24)
|
|
|
+ );
|
|
|
+ }
|
|
|
+}
|