ext.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. /**
  4. * @description 扩展方法,提供 gl-matrix 为提供的方法
  5. * */
  6. var gl_matrix_1 = require("gl-matrix");
  7. function leftTranslate(out, a, v) {
  8. var transMat = [0, 0, 0, 0, 0, 0, 0, 0, 0];
  9. gl_matrix_1.mat3.fromTranslation(transMat, v);
  10. return gl_matrix_1.mat3.multiply(out, transMat, a);
  11. }
  12. exports.leftTranslate = leftTranslate;
  13. function leftRotate(out, a, rad) {
  14. var rotateMat = [0, 0, 0, 0, 0, 0, 0, 0, 0];
  15. gl_matrix_1.mat3.fromRotation(rotateMat, rad);
  16. return gl_matrix_1.mat3.multiply(out, rotateMat, a);
  17. }
  18. exports.leftRotate = leftRotate;
  19. function leftScale(out, a, v) {
  20. var scaleMat = [0, 0, 0, 0, 0, 0, 0, 0, 0];
  21. gl_matrix_1.mat3.fromScaling(scaleMat, v);
  22. return gl_matrix_1.mat3.multiply(out, scaleMat, a);
  23. }
  24. exports.leftScale = leftScale;
  25. function leftMultiply(out, a, a1) {
  26. return gl_matrix_1.mat3.multiply(out, a1, a);
  27. }
  28. /**
  29. * 根据 actions 来做 transform
  30. * @param m
  31. * @param actions
  32. */
  33. function transform(m, actions) {
  34. var matrix = m ? [].concat(m) : [1, 0, 0, 0, 1, 0, 0, 0, 1];
  35. for (var i = 0, len = actions.length; i < len; i++) {
  36. var action = actions[i];
  37. switch (action[0]) {
  38. case 't':
  39. leftTranslate(matrix, matrix, [action[1], action[2]]);
  40. break;
  41. case 's':
  42. leftScale(matrix, matrix, [action[1], action[2]]);
  43. break;
  44. case 'r':
  45. leftRotate(matrix, matrix, action[1]);
  46. break;
  47. case 'm':
  48. leftMultiply(matrix, matrix, action[1]);
  49. break;
  50. default:
  51. break;
  52. }
  53. }
  54. return matrix;
  55. }
  56. exports.transform = transform;
  57. /**
  58. * 向量 v1 到 向量 v2 夹角的方向
  59. * @param {Array} v1 向量
  60. * @param {Array} v2 向量
  61. * @return {Boolean} >= 0 顺时针 < 0 逆时针
  62. */
  63. function direction(v1, v2) {
  64. return v1[0] * v2[1] - v2[0] * v1[1];
  65. }
  66. exports.direction = direction;
  67. /**
  68. * 二维向量 v1 到 v2 的夹角
  69. * @param v1
  70. * @param v2
  71. * @param direct
  72. */
  73. function angleTo(v1, v2, direct) {
  74. var ang = gl_matrix_1.vec2.angle(v1, v2);
  75. var angleLargeThanPI = direction(v1, v2) >= 0;
  76. if (direct) {
  77. if (angleLargeThanPI) {
  78. return Math.PI * 2 - ang;
  79. }
  80. return ang;
  81. }
  82. if (angleLargeThanPI) {
  83. return ang;
  84. }
  85. return Math.PI * 2 - ang;
  86. }
  87. exports.angleTo = angleTo;
  88. /**
  89. * 计算二维向量的垂直向量
  90. * @param out
  91. * @param v
  92. * @param flag
  93. */
  94. function vertical(out, v, flag) {
  95. if (flag) {
  96. out[0] = v[1];
  97. out[1] = -1 * v[0];
  98. }
  99. else {
  100. out[0] = -1 * v[1];
  101. out[1] = v[0];
  102. }
  103. return out;
  104. }
  105. exports.vertical = vertical;
  106. //# sourceMappingURL=ext.js.map