blob: 6b9a27b7f55d1c9212a9626b4c36faa70f8f1bf7 [file] [log] [blame]
Tony-LunarGb0b195d2015-05-13 15:01:06 -06001///////////////////////////////////////////////////////////////////////////////////////////////////
2// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
3///////////////////////////////////////////////////////////////////////////////////////////////////
4// Created : 2007-03-05
5// Updated : 2007-03-05
6// Licence : This source is under MIT License
7// File : glm/gtx/matrix_query.inl
8///////////////////////////////////////////////////////////////////////////////////////////////////
9// Dependency:
10// - GLM core
11///////////////////////////////////////////////////////////////////////////////////////////////////
12
13namespace glm
14{
15 template<typename T, precision P>
16 GLM_FUNC_QUALIFIER bool isNull(detail::tmat2x2<T, P> const & m, T const & epsilon)
17 {
18 bool result = true;
19 for(length_t i = 0; result && i < 2 ; ++i)
20 result = isNull(m[i], epsilon);
21 return result;
22 }
23
24 template<typename T, precision P>
25 GLM_FUNC_QUALIFIER bool isNull(detail::tmat3x3<T, P> const & m, T const & epsilon)
26 {
27 bool result = true;
28 for(length_t i = 0; result && i < 3 ; ++i)
29 result = isNull(m[i], epsilon);
30 return result;
31 }
32
33 template<typename T, precision P>
34 GLM_FUNC_QUALIFIER bool isNull(detail::tmat4x4<T, P> const & m, T const & epsilon)
35 {
36 bool result = true;
37 for(length_t i = 0; result && i < 4 ; ++i)
38 result = isNull(m[i], epsilon);
39 return result;
40 }
41
42 template<typename T, precision P, template <typename, precision> class matType>
43 GLM_FUNC_QUALIFIER bool isIdentity(matType<T, P> const & m, T const & epsilon)
44 {
45 bool result = true;
46 for(length_t i(0); result && i < m[0].length(); ++i)
47 {
48 for(length_t j(0); result && j < i ; ++j)
49 result = abs(m[i][j]) <= epsilon;
50 if(result)
51 result = abs(m[i][i] - 1) <= epsilon;
52 for(length_t j(i + 1); result && j < m.length(); ++j)
53 result = abs(m[i][j]) <= epsilon;
54 }
55 return result;
56 }
57
58 template<typename T, precision P>
59 GLM_FUNC_QUALIFIER bool isNormalized(detail::tmat2x2<T, P> const & m, T const & epsilon)
60 {
61 bool result(true);
62 for(length_t i(0); result && i < m.length(); ++i)
63 result = isNormalized(m[i], epsilon);
64 for(length_t i(0); result && i < m.length(); ++i)
65 {
66 typename detail::tmat2x2<T, P>::col_type v;
67 for(length_t j(0); j < m.length(); ++j)
68 v[j] = m[j][i];
69 result = isNormalized(v, epsilon);
70 }
71 return result;
72 }
73
74 template<typename T, precision P>
75 GLM_FUNC_QUALIFIER bool isNormalized(detail::tmat3x3<T, P> const & m, T const & epsilon)
76 {
77 bool result(true);
78 for(length_t i(0); result && i < m.length(); ++i)
79 result = isNormalized(m[i], epsilon);
80 for(length_t i(0); result && i < m.length(); ++i)
81 {
82 typename detail::tmat3x3<T, P>::col_type v;
83 for(length_t j(0); j < m.length(); ++j)
84 v[j] = m[j][i];
85 result = isNormalized(v, epsilon);
86 }
87 return result;
88 }
89
90 template<typename T, precision P>
91 GLM_FUNC_QUALIFIER bool isNormalized(detail::tmat4x4<T, P> const & m, T const & epsilon)
92 {
93 bool result(true);
94 for(length_t i(0); result && i < m.length(); ++i)
95 result = isNormalized(m[i], epsilon);
96 for(length_t i(0); result && i < m.length(); ++i)
97 {
98 typename detail::tmat4x4<T, P>::col_type v;
99 for(length_t j(0); j < m.length(); ++j)
100 v[j] = m[j][i];
101 result = isNormalized(v, epsilon);
102 }
103 return result;
104 }
105
106 template<typename T, precision P, template <typename, precision> class matType>
107 GLM_FUNC_QUALIFIER bool isOrthogonal(matType<T, P> const & m, T const & epsilon)
108 {
109 bool result(true);
110 for(length_t i(0); result && i < m.length() - 1; ++i)
111 for(length_t j(i + 1); result && j < m.length(); ++j)
112 result = areOrthogonal(m[i], m[j], epsilon);
113
114 if(result)
115 {
116 matType<T, P> tmp = transpose(m);
117 for(length_t i(0); result && i < m.length() - 1 ; ++i)
118 for(length_t j(i + 1); result && j < m.length(); ++j)
119 result = areOrthogonal(tmp[i], tmp[j], epsilon);
120 }
121 return result;
122 }
123}//namespace glm