matrix.js 1.7 KB

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