Matrix.java 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package me.hammerle.snuviscript.code;
  2. public final class Matrix {
  3. private final double[] data;
  4. private Matrix(double[] data) {
  5. this.data = data;
  6. }
  7. public Matrix() {
  8. data = new double[9];
  9. setIdentity();
  10. }
  11. public static Matrix getRotationY(double angle) {
  12. double[] a = new double[9];
  13. a[0] = Math.cos(angle);
  14. a[1] = 0.0;
  15. a[2] = -Math.sin(angle);
  16. a[3] = 0.0;
  17. a[4] = 1.0;
  18. a[5] = 0.0;
  19. a[6] = -a[2];
  20. a[7] = 0.0;
  21. a[8] = a[0];
  22. return new Matrix(a);
  23. }
  24. public static Matrix getRotationX(double angle) {
  25. double[] a = new double[9];
  26. a[0] = 1.0;
  27. a[1] = 0.0;
  28. a[2] = 0.0;
  29. a[3] = 0.0;
  30. a[4] = Math.cos(angle);
  31. a[5] = -Math.sin(angle);
  32. a[6] = 0.0;
  33. a[7] = -a[5];
  34. a[8] = a[4];
  35. return new Matrix(a);
  36. }
  37. public void setIdentity() {
  38. data[0] = 1;
  39. data[1] = 0;
  40. data[2] = 0;
  41. data[3] = 0;
  42. data[4] = 1;
  43. data[5] = 0;
  44. data[6] = 0;
  45. data[7] = 0;
  46. data[8] = 1;
  47. }
  48. public void mul(Vector v) {
  49. double x = v.getX();
  50. double y = v.getY();
  51. double z = v.getZ();
  52. v.set(data[0] * x + data[3] * y + data[6] * z,
  53. data[1] * x + data[4] * y + data[7] * z,
  54. data[2] * x + data[5] * y + data[8] * z);
  55. }
  56. public Matrix mul(Matrix m) {
  57. double[] a = new double[9];
  58. a[0] = data[0] * m.data[0] + data[3] * m.data[1] + data[6] * m.data[2];
  59. a[1] = data[1] * m.data[0] + data[4] * m.data[1] + data[7] * m.data[2];
  60. a[2] = data[2] * m.data[0] + data[5] * m.data[1] + data[8] * m.data[2];
  61. a[3] = data[0] * m.data[3] + data[3] * m.data[4] + data[6] * m.data[5];
  62. a[4] = data[1] * m.data[3] + data[4] * m.data[4] + data[7] * m.data[5];
  63. a[5] = data[2] * m.data[3] + data[5] * m.data[4] + data[8] * m.data[5];
  64. a[6] = data[0] * m.data[6] + data[3] * m.data[7] + data[6] * m.data[8];
  65. a[7] = data[1] * m.data[6] + data[4] * m.data[7] + data[7] * m.data[8];
  66. a[8] = data[2] * m.data[6] + data[5] * m.data[7] + data[8] * m.data[8];
  67. return new Matrix(a);
  68. }
  69. @Override
  70. public String toString() {
  71. return String.format("[%.3f %.3f %.3f, %.3f %.3f %.3f, %.3f %.3f %.3f]",
  72. data[0], data[3], data[6], data[1], data[4], data[7], data[2], data[5], data[8]);
  73. }
  74. }