matrix.js 1.8 KB

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