1/////////////////////////////////////////////////////////////////////////////////////////////////// 2// OpenGL Mathematics Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) 3/////////////////////////////////////////////////////////////////////////////////////////////////// 4// Created : 2005-12-21 5// Updated : 2011-06-07 6// Licence : This source is under MIT License 7// File : glm/gtx/epsilon.inl 8/////////////////////////////////////////////////////////////////////////////////////////////////// 9 10namespace glm 11{ 12 template <typename genType> 13 GLM_FUNC_QUALIFIER bool equalEpsilon 14 ( 15 genType const & x, 16 genType const & y, 17 genType const & epsilon 18 ) 19 { 20 return abs(x - y) < epsilon; 21 } 22 23 template <typename genType> 24 GLM_FUNC_QUALIFIER bool notEqualEpsilon 25 ( 26 genType const & x, 27 genType const & y, 28 genType const & epsilon 29 ) 30 { 31 return abs(x - y) >= epsilon; 32 } 33 34 template <typename valType> 35 GLM_FUNC_QUALIFIER detail::tvec2<bool> equalEpsilon 36 ( 37 detail::tvec2<valType> const & x, 38 detail::tvec2<valType> const & y, 39 valType const & epsilon) 40 { 41 return detail::tvec2<bool>( 42 abs(x.x - y.x) < epsilon, 43 abs(x.y - y.y) < epsilon); 44 } 45 46 template <typename valType> 47 GLM_FUNC_QUALIFIER detail::tvec3<bool> equalEpsilon 48 ( 49 detail::tvec3<valType> const & x, 50 detail::tvec3<valType> const & y, 51 valType const & epsilon) 52 { 53 return detail::tvec3<bool>( 54 abs(x.x - y.x) < epsilon, 55 abs(x.y - y.y) < epsilon, 56 abs(x.z - y.z) < epsilon); 57 } 58 59 template <typename valType> 60 GLM_FUNC_QUALIFIER detail::tvec4<bool> equalEpsilon 61 ( 62 detail::tvec4<valType> const & x, 63 detail::tvec4<valType> const & y, 64 valType const & epsilon 65 ) 66 { 67 return detail::tvec4<bool>( 68 abs(x.x - y.x) < epsilon, 69 abs(x.y - y.y) < epsilon, 70 abs(x.z - y.z) < epsilon, 71 abs(x.w - y.w) < epsilon); 72 } 73 74 template <typename valType> 75 GLM_FUNC_QUALIFIER detail::tvec2<bool> notEqualEpsilon 76 ( 77 detail::tvec2<valType> const & x, 78 detail::tvec2<valType> const & y, 79 valType const & epsilon 80 ) 81 { 82 return detail::tvec2<bool>( 83 abs(x.x - y.x) >= epsilon, 84 abs(x.y - y.y) >= epsilon); 85 } 86 87 template <typename valType> 88 GLM_FUNC_QUALIFIER detail::tvec3<bool> notEqualEpsilon 89 ( 90 detail::tvec3<valType> const & x, 91 detail::tvec3<valType> const & y, 92 valType const & epsilon 93 ) 94 { 95 return detail::tvec3<bool>( 96 abs(x.x - y.x) >= epsilon, 97 abs(x.y - y.y) >= epsilon, 98 abs(x.z - y.z) >= epsilon); 99 } 100 101 template <typename valType> 102 GLM_FUNC_QUALIFIER detail::tvec4<bool> notEqualEpsilon 103 ( 104 detail::tvec4<valType> const & x, 105 detail::tvec4<valType> const & y, 106 valType const & epsilon 107 ) 108 { 109 return detail::tvec4<bool>( 110 abs(x.x - y.x) >= epsilon, 111 abs(x.y - y.y) >= epsilon, 112 abs(x.z - y.z) >= epsilon, 113 abs(x.w - y.w) >= epsilon); 114 } 115 116 template <typename valType> 117 GLM_FUNC_QUALIFIER detail::tvec2<bool> equalEpsilon 118 ( 119 detail::tvec2<valType> const & x, 120 detail::tvec2<valType> const & y, 121 detail::tvec2<valType> const & epsilon 122 ) 123 { 124 return detail::tvec2<bool>( 125 abs(x.x - y.x) < epsilon.x, 126 abs(x.y - y.y) < epsilon.y); 127 } 128 129 template <typename valType> 130 GLM_FUNC_QUALIFIER detail::tvec3<bool> equalEpsilon 131 ( 132 detail::tvec3<valType> const & x, 133 detail::tvec3<valType> const & y, 134 detail::tvec3<valType> const & epsilon 135 ) 136 { 137 return detail::tvec3<bool>( 138 abs(x.x - y.x) < epsilon.x, 139 abs(x.y - y.y) < epsilon.y, 140 abs(x.z - y.z) < epsilon.z); 141 } 142 143 template <typename valType> 144 GLM_FUNC_QUALIFIER detail::tvec4<bool> equalEpsilon 145 ( 146 detail::tvec4<valType> const & x, 147 detail::tvec4<valType> const & y, 148 detail::tvec4<valType> const & epsilon 149 ) 150 { 151 return detail::tvec4<bool>( 152 abs(x.x - y.x) < epsilon.x, 153 abs(x.y - y.y) < epsilon.y, 154 abs(x.z - y.z) < epsilon.z, 155 abs(x.w - y.w) < epsilon.w); 156 } 157 158 template <typename valType> 159 GLM_FUNC_QUALIFIER detail::tvec4<bool> equalEpsilon 160 ( 161 detail::tquat<valType> const & x, 162 detail::tquat<valType> const & y, 163 detail::tquat<valType> const & epsilon 164 ) 165 { 166 return detail::tvec4<bool>( 167 abs(x.x - y.x) < epsilon.x, 168 abs(x.y - y.y) < epsilon.y, 169 abs(x.z - y.z) < epsilon.z, 170 abs(x.w - y.w) < epsilon.w); 171 } 172 173 template <typename valType> 174 GLM_FUNC_QUALIFIER detail::tvec2<bool> notEqualEpsilon 175 ( 176 detail::tvec2<valType> const & x, 177 detail::tvec2<valType> const & y, 178 detail::tvec2<valType> const & epsilon 179 ) 180 { 181 return detail::tvec2<bool>( 182 abs(x.x - y.x) >= epsilon.x, 183 abs(x.y - y.y) >= epsilon.y); 184 } 185 186 template <typename valType> 187 GLM_FUNC_QUALIFIER detail::tvec3<bool> notEqualEpsilon 188 ( 189 detail::tvec3<valType> const & x, 190 detail::tvec3<valType> const & y, 191 detail::tvec3<valType> const & epsilon 192 ) 193 { 194 return detail::tvec3<bool>( 195 abs(x.x - y.x) >= epsilon.x, 196 abs(x.y - y.y) >= epsilon.y, 197 abs(x.z - y.z) >= epsilon.z); 198 } 199 200 template <typename valType> 201 GLM_FUNC_QUALIFIER detail::tvec4<bool> notEqualEpsilon 202 ( 203 detail::tvec4<valType> const & x, 204 detail::tvec4<valType> const & y, 205 detail::tvec4<valType> const & epsilon 206 ) 207 { 208 return detail::tvec4<bool>( 209 abs(x.x - y.x) >= epsilon.x, 210 abs(x.y - y.y) >= epsilon.y, 211 abs(x.z - y.z) >= epsilon.z, 212 abs(x.w - y.w) >= epsilon.w); 213 } 214 215 template <typename valType> 216 GLM_FUNC_QUALIFIER detail::tvec4<bool> notEqualEpsilon 217 ( 218 detail::tquat<valType> const & x, 219 detail::tquat<valType> const & y, 220 detail::tquat<valType> const & epsilon 221 ) 222 { 223 return detail::tvec4<bool>( 224 abs(x.x - y.x) >= epsilon.x, 225 abs(x.y - y.y) >= epsilon.y, 226 abs(x.z - y.z) >= epsilon.z, 227 abs(x.w - y.w) >= epsilon.w); 228 } 229}//namespace glm 230