Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }