public Matrix4x4 add(Matrix4x4 other) { return new Matrix4x4( this.mat4[0] + other.get_value(0), this.mat4[1] + other.get_value(1), this.mat4[2] + other.get_value(2), this.mat4[3] + other.get_value(3), this.mat4[4] + other.get_value(4), this.mat4[5] + other.get_value(5), this.mat4[6] + other.get_value(6), this.mat4[7] + other.get_value(7), this.mat4[8] + other.get_value(8), this.mat4[9] + other.get_value(9), this.mat4[10] + other.get_value(10), this.mat4[11] + other.get_value(11), this.mat4[12] + other.get_value(12), this.mat4[13] + other.get_value(13), this.mat4[14] + other.get_value(14), this.mat4[15] + other.get_value(15)); }
public Matrix4x4 subtract(Matrix4x4 other) { return new Matrix4x4( this.mat4[0] - other.get_value(0), this.mat4[1] - other.get_value(1), this.mat4[2] - other.get_value(2), this.mat4[3] - other.get_value(3), this.mat4[4] - other.get_value(4), this.mat4[5] - other.get_value(5), this.mat4[6] - other.get_value(6), this.mat4[7] - other.get_value(7), this.mat4[8] - other.get_value(8), this.mat4[9] - other.get_value(9), this.mat4[10] - other.get_value(10), this.mat4[11] - other.get_value(11), this.mat4[12] - other.get_value(12), this.mat4[13] - other.get_value(13), this.mat4[14] - other.get_value(14), this.mat4[15] - other.get_value(15)); }
// copy constructor public Matrix4x4(Matrix4x4 mat) { this.mat4[0] = mat.get_value(0); this.mat4[1] = mat.get_value(1); this.mat4[2] = mat.get_value(2); this.mat4[3] = mat.get_value(3); this.mat4[4] = mat.get_value(4); this.mat4[5] = mat.get_value(5); this.mat4[6] = mat.get_value(6); this.mat4[7] = mat.get_value(7); this.mat4[8] = mat.get_value(8); this.mat4[9] = mat.get_value(9); this.mat4[10] = mat.get_value(10); this.mat4[11] = mat.get_value(11); this.mat4[12] = mat.get_value(12); this.mat4[13] = mat.get_value(13); this.mat4[14] = mat.get_value(14); this.mat4[15] = mat.get_value(15); flagBits = Mathematics.mat_type_General; }
private Matrix4x4 orthonormalInverse() { Matrix4x4 result = new Matrix4x4(1); // The '1' says not to load identity result.set_value(0, mat4[0]); result.set_value(4, mat4[1]); result.set_value(8, mat4[2]); result.set_value(1, mat4[4]); result.set_value(5, mat4[5]); result.set_value(9, mat4[6]); result.set_value(2, mat4[8]); result.set_value(6, mat4[9]); result.set_value(10, mat4[10]); result.set_value(3, 0.0); result.set_value(7, 0.0); result.set_value(11, 0.0); // might have wrong values result.set_value( 12, -(result.get_value(0) * mat4[12] + result.get_value(4) * mat4[13] + result.get_value(8) * mat4[14])); result.set_value( 13, -(result.get_value(1) * mat4[12] + result.get_value(5) * mat4[13] + result.get_value(9) * mat4[14])); result.set_value( 14, -(result.get_value(2) * mat4[12] + result.get_value(6) * mat4[13] + result.get_value(10) * mat4[14])); result.set_value(15, 1.0); return result; }
public Matrix4x4 multiply(Matrix4x4 other) { if (this.flagBits == Mathematics.mat_type_Identity) return new Matrix4x4(other); else if (other.getType() == Mathematics.mat_type_Identity) return new Matrix4x4(this); return new Matrix4x4( // Fisrt Column mat4[0] * other.get_value(0) + mat4[4] * other.get_value(1) + mat4[8] * other.get_value(2) + mat4[12] * other.get_value(3), mat4[1] * other.get_value(0) + mat4[5] * other.get_value(1) + mat4[9] * other.get_value(2) + mat4[13] * other.get_value(3), mat4[2] * other.get_value(0) + mat4[6] * other.get_value(1) + mat4[10] * other.get_value(2) + mat4[14] * other.get_value(3), mat4[3] * other.get_value(0) + mat4[7] * other.get_value(1) + mat4[11] * other.get_value(2) + mat4[15] * other.get_value(3), // Second Column mat4[0] * other.get_value(4) + mat4[4] * other.get_value(5) + mat4[8] * other.get_value(6) + mat4[12] * other.get_value(7), mat4[1] * other.get_value(4) + mat4[5] * other.get_value(5) + mat4[9] * other.get_value(6) + mat4[13] * other.get_value(7), mat4[2] * other.get_value(4) + mat4[6] * other.get_value(5) + mat4[10] * other.get_value(6) + mat4[14] * other.get_value(7), mat4[3] * other.get_value(4) + mat4[7] * other.get_value(5) + mat4[11] * other.get_value(6) + mat4[15] * other.get_value(7), // Third Column mat4[0] * other.get_value(8) + mat4[4] * other.get_value(9) + mat4[8] * other.get_value(10) + mat4[12] * other.get_value(11), mat4[1] * other.get_value(8) + mat4[5] * other.get_value(9) + mat4[9] * other.get_value(10) + mat4[13] * other.get_value(11), mat4[2] * other.get_value(8) + mat4[6] * other.get_value(9) + mat4[10] * other.get_value(10) + mat4[14] * other.get_value(11), mat4[3] * other.get_value(8) + mat4[7] * other.get_value(9) + mat4[11] * other.get_value(10) + mat4[15] * other.get_value(11), // Fourth Column mat4[0] * other.get_value(12) + mat4[4] * other.get_value(13) + mat4[8] * other.get_value(14) + mat4[12] * other.get_value(15), mat4[1] * other.get_value(12) + mat4[5] * other.get_value(13) + mat4[9] * other.get_value(14) + mat4[13] * other.get_value(15), mat4[2] * other.get_value(12) + mat4[6] * other.get_value(13) + mat4[10] * other.get_value(14) + mat4[14] * other.get_value(15), mat4[3] * other.get_value(12) + mat4[7] * other.get_value(13) + mat4[11] * other.get_value(14) + mat4[15] * other.get_value(15) // is General matrix... ); }