matrix.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. "use strict";
  2. var Matrix = {
  3. multiply: function multiply(m1, m2) {
  4. var m11 = m1[0] * m2[0] + m1[2] * m2[1];
  5. var m12 = m1[1] * m2[0] + m1[3] * m2[1];
  6. var m21 = m1[0] * m2[2] + m1[2] * m2[3];
  7. var m22 = m1[1] * m2[2] + m1[3] * m2[3];
  8. var dx = m1[0] * m2[4] + m1[2] * m2[5] + m1[4];
  9. var dy = m1[1] * m2[4] + m1[3] * m2[5] + m1[5];
  10. return [m11, m12, m21, m22, dx, dy];
  11. },
  12. scale: function scale(out, m, v) {
  13. out[0] = m[0] * v[0];
  14. out[1] = m[1] * v[0];
  15. out[2] = m[2] * v[1];
  16. out[3] = m[3] * v[1];
  17. out[4] = m[4];
  18. out[5] = m[5];
  19. return out;
  20. },
  21. rotate: function rotate(out, m, radian) {
  22. var c = Math.cos(radian);
  23. var s = Math.sin(radian);
  24. var m11 = m[0] * c + m[2] * s;
  25. var m12 = m[1] * c + m[3] * s;
  26. var m21 = m[0] * -s + m[2] * c;
  27. var m22 = m[1] * -s + m[3] * c;
  28. out[0] = m11;
  29. out[1] = m12;
  30. out[2] = m21;
  31. out[3] = m22;
  32. out[4] = m[4];
  33. out[5] = m[5];
  34. return out;
  35. },
  36. translate: function translate(out, m, v) {
  37. out[0] = m[0];
  38. out[1] = m[1];
  39. out[2] = m[2];
  40. out[3] = m[3];
  41. out[4] = m[4] + m[0] * v[0] + m[2] * v[1];
  42. out[5] = m[5] + m[1] * v[0] + m[3] * v[1];
  43. return out;
  44. },
  45. transform: function transform(m, actions) {
  46. var out = [].concat(m);
  47. for (var i = 0, len = actions.length; i < len; i++) {
  48. var action = actions[i];
  49. switch (action[0]) {
  50. case 't':
  51. Matrix.translate(out, out, [action[1], action[2]]);
  52. break;
  53. case 's':
  54. Matrix.scale(out, out, [action[1], action[2]]);
  55. break;
  56. case 'r':
  57. Matrix.rotate(out, out, action[1]);
  58. break;
  59. default:
  60. break;
  61. }
  62. }
  63. return out;
  64. }
  65. };
  66. module.exports = Matrix;