public void When_Calculating_Adjoint_Of_Matrix_Matrix_With_Result_Is_Returned() { //Arrange Matrix4 matrixOne = new Matrix4(1.0, 2.0, 0.0, 3.0, 3.0, 2.0, 1.0, 2.0, 1.0, 0.0, 1.0, 1.0, 2.0, 1.0, 3.0, 3.0); //Act Matrix4 result = matrixOne.Adjoint(); //Assert Assert.AreEqual(-1.0, result.XX); Assert.AreEqual(3.0, result.XY); Assert.AreEqual(9.0, result.XZ); Assert.AreEqual(-4.0, result.XW); Assert.AreEqual(-1.0, result.YX); Assert.AreEqual(3.0, result.YY); Assert.AreEqual(-18.0, result.YZ); Assert.AreEqual(5.0, result.YW); Assert.AreEqual(-3.0, result.ZX); Assert.AreEqual(0.0, result.ZY); Assert.AreEqual(-9.0, result.ZZ); Assert.AreEqual(6.0, result.ZW); Assert.AreEqual(4.0, result.WX); Assert.AreEqual(-3.0, result.WY); Assert.AreEqual(9.0, result.WZ); Assert.AreEqual(-2.0, result.WW); }
public Matrix4 Inverse() { Matrix4 matrixOne = new Matrix4(xx, xy, xz, xw, yx, yy, yz, yw, zx, zy, zz, zw, wx, wy, wz, ww); Matrix4 adjOne = matrixOne.Adjoint(); double detOne = matrixOne.Determinant(); return new Matrix4( adjOne.xx / detOne, adjOne.xy / detOne, adjOne.xz / detOne, adjOne.xw / detOne, adjOne.yx / detOne, adjOne.yy / detOne, adjOne.yz / detOne, adjOne.yw / detOne, adjOne.zx / detOne, adjOne.zy / detOne, adjOne.zz / detOne, adjOne.zw / detOne, adjOne.wx / detOne, adjOne.wy / detOne, adjOne.wz / detOne, adjOne.ww / detOne); }