Subversion Repositories gelsvn

Rev

Rev 2 | Rev 89 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2 Rev 12
Line 33... Line 33...
33
		/// Construct a Mat2x2f from four scalars.
33
    /// Construct a Mat2x2f from four scalars.
34
		ArithSqMat2x2Float(ScalarType a, ScalarType b, 
34
    ArithSqMat2x2Float(ScalarType a, ScalarType b, 
35
											 ScalarType c, ScalarType d): 
35
		       ScalarType c, ScalarType d): 
36
			ArithSqMatFloat<V, M, 2>(V(a,b),V(c,d)) {}
36
      ArithSqMatFloat<V, M, 2>(V(a,b),V(c,d)) {}
37
  
37
  
38
		/// Construct the 0 matrix
38
    /// Construct the NAN matrix
39
		ArithSqMat2x2Float() {}
39
    ArithSqMat2x2Float() {}
40
 
40
 
-
 
41
    /// Construct a matrix from a single scalar value.
-
 
42
    explicit ArithSqMat2x2Float(ScalarType a): 
-
 
43
      ArithSqMatFloat<V, M, 2>(a) {}
41
	};
44
  };
42
 
45
 
43
	/** Compute the determinant of a Mat2x2f. This function is faster than
46
  /** Compute the determinant of a Mat2x2f. This function is faster than
44
			the generic determinant function for ArithSqMat */
47
      the generic determinant function for ArithSqMat */
45
	template<class V, class M>
48
  template<class V, class M>
Line 50... Line 53...
50
	}
53
  }
51
 
54
 
52
	template<class V, class M>
55
  template<class V, class M>
53
	const M invert(const ArithSqMat2x2Float<V,M>& m)
56
  const M invert(const ArithSqMat2x2Float<V,M>& m)
54
	{
57
  {
55
		float det = determinant(m);
58
    typename M::ScalarType det = determinant(m);
56
		if( !is_tiny(fabs(det)))
59
    if( !is_tiny(fabs(det)))
57
			{
60
      {
58
				return M(m[1][1]/det, -m[0][1]/det,-m[1][0]/det, m[0][0]/det);
61
	return M(m[1][1]/det, -m[0][1]/det,-m[1][0]/det, m[0][0]/det);
59
			}
62
      }
60
		throw Mat2x2fException("Cannot invert matrix");
63
    throw Mat2x2fException("Cannot invert matrix");