matrix.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. "use strict";
  2. /**
  3. * @fileoverview 矩阵运算,本来是要引入 gl-matrix, 但是考虑到 g-mobile 对大小有限制,同时 g-webgl 使用的 matrix 不一致
  4. * 所以,这里仅实现 2D 几个运算,上层自己引入 gl-matrix
  5. * @author dxq613@gmail.com
  6. */
  7. Object.defineProperty(exports, "__esModule", { value: true });
  8. exports.invert = exports.multiplyVec2 = exports.multiplyMatrix = void 0;
  9. /**
  10. * 3阶矩阵相乘
  11. * @param {number[]} a 矩阵1
  12. * @param {number[]} b 矩阵2
  13. */
  14. function multiplyMatrix(a, b) {
  15. var out = [];
  16. var a00 = a[0];
  17. var a01 = a[1];
  18. var a02 = a[2];
  19. var a10 = a[3];
  20. var a11 = a[4];
  21. var a12 = a[5];
  22. var a20 = a[6];
  23. var a21 = a[7];
  24. var a22 = a[8];
  25. var b00 = b[0];
  26. var b01 = b[1];
  27. var b02 = b[2];
  28. var b10 = b[3];
  29. var b11 = b[4];
  30. var b12 = b[5];
  31. var b20 = b[6];
  32. var b21 = b[7];
  33. var b22 = b[8];
  34. out[0] = b00 * a00 + b01 * a10 + b02 * a20;
  35. out[1] = b00 * a01 + b01 * a11 + b02 * a21;
  36. out[2] = b00 * a02 + b01 * a12 + b02 * a22;
  37. out[3] = b10 * a00 + b11 * a10 + b12 * a20;
  38. out[4] = b10 * a01 + b11 * a11 + b12 * a21;
  39. out[5] = b10 * a02 + b11 * a12 + b12 * a22;
  40. out[6] = b20 * a00 + b21 * a10 + b22 * a20;
  41. out[7] = b20 * a01 + b21 * a11 + b22 * a21;
  42. out[8] = b20 * a02 + b21 * a12 + b22 * a22;
  43. return out;
  44. }
  45. exports.multiplyMatrix = multiplyMatrix;
  46. /**
  47. * 3阶矩阵同2阶向量相乘
  48. * @param {number[]} m 矩阵
  49. * @param {number[]} v 二阶向量
  50. */
  51. function multiplyVec2(m, v) {
  52. var out = [];
  53. var x = v[0];
  54. var y = v[1];
  55. out[0] = m[0] * x + m[3] * y + m[6];
  56. out[1] = m[1] * x + m[4] * y + m[7];
  57. return out;
  58. }
  59. exports.multiplyVec2 = multiplyVec2;
  60. /**
  61. * 矩阵的逆
  62. * @param {number[]} a 矩阵
  63. */
  64. function invert(a) {
  65. var out = [];
  66. var a00 = a[0];
  67. var a01 = a[1];
  68. var a02 = a[2];
  69. var a10 = a[3];
  70. var a11 = a[4];
  71. var a12 = a[5];
  72. var a20 = a[6];
  73. var a21 = a[7];
  74. var a22 = a[8];
  75. var b01 = a22 * a11 - a12 * a21;
  76. var b11 = -a22 * a10 + a12 * a20;
  77. var b21 = a21 * a10 - a11 * a20;
  78. // Calculate the determinant
  79. var det = a00 * b01 + a01 * b11 + a02 * b21;
  80. if (!det) {
  81. return null;
  82. }
  83. det = 1.0 / det;
  84. out[0] = b01 * det;
  85. out[1] = (-a22 * a01 + a02 * a21) * det;
  86. out[2] = (a12 * a01 - a02 * a11) * det;
  87. out[3] = b11 * det;
  88. out[4] = (a22 * a00 - a02 * a20) * det;
  89. out[5] = (-a12 * a00 + a02 * a10) * det;
  90. out[6] = b21 * det;
  91. out[7] = (-a21 * a00 + a01 * a20) * det;
  92. out[8] = (a11 * a00 - a01 * a10) * det;
  93. return out;
  94. }
  95. exports.invert = invert;
  96. //# sourceMappingURL=matrix.js.map