Blame c++/freetype/src/matrix.cpp

b8976b
#include "matrix.h"
b8976b
b8976b
b8976b
Real
b8976b
Matrix3::det() const {
b8976b
    return m00*(m11*m22 - m12*m21)
b8976b
         + m01*(m12*m20 - m10*m22)
b8976b
         + m02*(m10*m21 - m11*m20);
b8976b
}
b8976b
b8976b
Matrix3
b8976b
Matrix3::inverted(bool *success) const {
b8976b
	const Real rm00 = m11*m22 - m12*m21;
b8976b
	const Real rm10 = m12*m20 - m10*m22;
b8976b
	const Real rm20 = m10*m21 - m11*m20;
b8976b
	const Real d = m00*rm00 + m01*rm10 + m02*rm20;
b8976b
	
b8976b
	Real k;
b8976b
	if (fabs(d) > real_precision) {
b8976b
		k = 1/d;
b8976b
		if (success) *success = true;
b8976b
	} else {
b8976b
		k = 0;
b8976b
		if (success) *success = false;
b8976b
	}
b8976b
	
b8976b
	return Matrix3(
b8976b
		Vector3( m11*m22 - m12*m21,
b8976b
				 m02*m21 - m01*m22,
b8976b
				 m01*m12 - m02*m11 )*k,
b8976b
		Vector3( m12*m20 - m10*m22,
b8976b
				 m00*m22 - m02*m20,
b8976b
				 m02*m10 - m00*m12 )*k,
b8976b
		Vector3( m10*m21 - m11*m20,
b8976b
				 m01*m20 - m00*m21,
b8976b
				 m00*m11 - m01*m10 )*k );
b8976b
}
b8976b