|
@@ -0,0 +1,83 @@
|
|
|
+package me.hammerle.snuviscript.code;
|
|
|
+
|
|
|
+public final class Matrix {
|
|
|
+ private final double[] data;
|
|
|
+
|
|
|
+ private Matrix(double[] data) {
|
|
|
+ this.data = data;
|
|
|
+ }
|
|
|
+
|
|
|
+ public Matrix() {
|
|
|
+ data = new double[9];
|
|
|
+ setIdentity();
|
|
|
+ }
|
|
|
+
|
|
|
+ public static Matrix getRotationY(double angle) {
|
|
|
+ double[] a = new double[9];
|
|
|
+ a[0] = Math.cos(angle);
|
|
|
+ a[1] = 0.0;
|
|
|
+ a[2] = -Math.sin(angle);
|
|
|
+ a[3] = 0.0;
|
|
|
+ a[4] = 1.0;
|
|
|
+ a[5] = 0.0;
|
|
|
+ a[6] = -a[2];
|
|
|
+ a[7] = 0.0;
|
|
|
+ a[8] = a[0];
|
|
|
+ return new Matrix(a);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static Matrix getRotationX(double angle) {
|
|
|
+ double[] a = new double[9];
|
|
|
+ a[0] = 1.0;
|
|
|
+ a[1] = 0.0;
|
|
|
+ a[2] = 0.0;
|
|
|
+ a[3] = 0.0;
|
|
|
+ a[4] = Math.cos(angle);
|
|
|
+ a[5] = -Math.sin(angle);
|
|
|
+ a[6] = 0.0;
|
|
|
+ a[7] = -a[5];
|
|
|
+ a[8] = a[4];
|
|
|
+ return new Matrix(a);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void setIdentity() {
|
|
|
+ data[0] = 1;
|
|
|
+ data[1] = 0;
|
|
|
+ data[2] = 0;
|
|
|
+ data[3] = 0;
|
|
|
+ data[4] = 1;
|
|
|
+ data[5] = 0;
|
|
|
+ data[6] = 0;
|
|
|
+ data[7] = 0;
|
|
|
+ data[8] = 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void mul(Vector v) {
|
|
|
+ double x = v.getX();
|
|
|
+ double y = v.getY();
|
|
|
+ double z = v.getZ();
|
|
|
+ v.set(data[0] * x + data[3] * y + data[6] * z,
|
|
|
+ data[1] * x + data[4] * y + data[7] * z,
|
|
|
+ data[2] * x + data[5] * y + data[8] * z);
|
|
|
+ }
|
|
|
+
|
|
|
+ public Matrix mul(Matrix m) {
|
|
|
+ double[] a = new double[9];
|
|
|
+ a[0] = data[0] * m.data[0] + data[3] * m.data[1] + data[6] * m.data[2];
|
|
|
+ a[1] = data[1] * m.data[0] + data[4] * m.data[1] + data[7] * m.data[2];
|
|
|
+ a[2] = data[2] * m.data[0] + data[5] * m.data[1] + data[8] * m.data[2];
|
|
|
+ a[3] = data[0] * m.data[3] + data[3] * m.data[4] + data[6] * m.data[5];
|
|
|
+ a[4] = data[1] * m.data[3] + data[4] * m.data[4] + data[7] * m.data[5];
|
|
|
+ a[5] = data[2] * m.data[3] + data[5] * m.data[4] + data[8] * m.data[5];
|
|
|
+ a[6] = data[0] * m.data[6] + data[3] * m.data[7] + data[6] * m.data[8];
|
|
|
+ a[7] = data[1] * m.data[6] + data[4] * m.data[7] + data[7] * m.data[8];
|
|
|
+ a[8] = data[2] * m.data[6] + data[5] * m.data[7] + data[8] * m.data[8];
|
|
|
+ return new Matrix(a);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public String toString() {
|
|
|
+ return String.format("[%.3f %.3f %.3f, %.3f %.3f %.3f, %.3f %.3f %.3f]",
|
|
|
+ data[0], data[3], data[6], data[1], data[4], data[7], data[2], data[5], data[8]);
|
|
|
+ }
|
|
|
+}
|