Axiom.Math.Matrix4.InverseAffine C# (CSharp) Method

InverseAffine() public method

Returns an inverted affine matrix.
public InverseAffine ( ) : Matrix4
return Matrix4
		public Matrix4 InverseAffine()
		{
			Debug.Assert( IsAffine );

			Real t00 = m22 * m11 - m21 * m12;
			Real t10 = m20 * m12 - m22 * m10;
			Real t20 = m21 * m10 - m20 * m11;

			Real invDet = 1 / ( m00 * t00 + m01 * t10 + m02 * t20 );

			t00 *= invDet;
			t10 *= invDet;
			t20 *= invDet;

			m00 *= invDet;
			m01 *= invDet;
			m02 *= invDet;

			Real r00 = t00;
			Real r01 = m02 * m21 - m01 * m22;
			Real r02 = m01 * m12 - m02 * m11;

			Real r10 = t10;
			Real r11 = m00 * m22 - m02 * m20;
			Real r12 = m02 * m10 - m00 * m12;

			Real r20 = t20;
			Real r21 = m01 * m20 - m00 * m21;
			Real r22 = m00 * m11 - m01 * m10;

			Real r03 = -( r00 * m03 + r01 * m13 + r02 * m23 );
			Real r13 = -( r10 * m03 + r11 * m13 + r12 * m23 );
			Real r23 = -( r20 * m03 + r21 * m13 + r22 * m23 );

			return new Matrix4(
				r00, r01, r02, r03,
				r10, r11, r12, r13,
				r20, r21, r22, r23,
				  0, 0, 0, 1 );

		}