package com.flansmod.common.vector;
import net.minecraft.util.MathHelper;
import net.minecraft.util.Vec3;
public class Matrix3f
{
float[][] matrix = new float[3][3];
public Matrix3f(float[][] Matrix)
{
for(int i = 0;i < 3;i++)
{
System.arraycopy(Matrix[i], 0, matrix[i], 0, 3);
}
}
public Matrix3f(float m11, float m12, float m13, float m21, float m22, float m23, float m31, float m32, float m33)
{
matrix[0][0] = m11;matrix[0][1] = m12;matrix[0][2] = m13;
matrix[1][0] = m21;matrix[1][1] = m22;matrix[1][2] = m23;
matrix[2][0] = m31;matrix[2][1] = m32;matrix[2][2] = m33;
}
public Matrix3f mult(Matrix3f m)
{
return Matrix3f.multMatrix(this, m);
}
public Vec3 mult(Vec3 v)
{
return Matrix3f.multVec(this, v);
}
public static Matrix3f getMatrixRotX(float r)
{
float sn = MathHelper.sin(r);
float cs = MathHelper.cos(r);
return new Matrix3f(new float[][]
{
{1, 0, 0},
{0, cs, -sn},
{0, sn, cs}
});
}
public static Matrix3f getMatrixRotY(float r)
{
float sn = MathHelper.sin(r);
float cs = MathHelper.cos(r);
return new Matrix3f(new float[][]
{
{cs, 0, sn},
{0, 1, 0},
{-sn, 0, cs}
});
}
public static Matrix3f getMatrixRotZ(float r)
{
float sn = MathHelper.sin(r);
float cs = MathHelper.cos(r);
return new Matrix3f(new float[][]
{
{cs, -sn, 0},
{sn, cs, 0},
{0, 0, 1}
});
}
public static Vec3 multVec(Matrix3f m, Vec3 vec)
{
float[][] retMat = new float[3][3];
float[] retVec = new float[3];
for(int i =0;i < 3;i++)
{
float[] row = {m.matrix[i][0],m.matrix[i][1],m.matrix[i][2]};
float[] column = {(float)vec.xCoord, (float)vec.yCoord, (float)vec.zCoord};
for(int sm = 0; sm < 3; sm++) retVec[i] += row[sm]*column[sm];
}
return new Vec3(retVec[0], retVec[1], retVec[2]);
}
public static Matrix3f multMatrix(Matrix3f m1, Matrix3f m2)
{
Matrix3f retMat = new Matrix3f(new float[3][3]);
for(int i =0;i < 3;i++)
{
float[] row = {m1.matrix[i][0],m1.matrix[i][1],m1.matrix[i][2]};
for(int j = 0;j < 3;j++)
{
float[] column = {m2.matrix[0][j], m2.matrix[1][j], m2.matrix[2][j]};
for(int sm = 0; sm < 3; sm++) retMat.matrix[i][j] += row[sm]*column[sm];
}
}
return retMat;
}
}