1/////////////////////////////////////////////////////////////////////////////////// 2/// OpenGL Mathematics (glm.g-truc.net) 3/// 4/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) 5/// Permission is hereby granted, free of charge, to any person obtaining a copy 6/// of this software and associated documentation files (the "Software"), to deal 7/// in the Software without restriction, including without limitation the rights 8/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9/// copies of the Software, and to permit persons to whom the Software is 10/// furnished to do so, subject to the following conditions: 11/// 12/// The above copyright notice and this permission notice shall be included in 13/// all copies or substantial portions of the Software. 14/// 15/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21/// THE SOFTWARE. 22/// 23/// @ref gtc_epsilon 24/// @file glm/gtc/epsilon.inl 25/// @date 2012-04-07 / 2012-04-07 26/// @author Christophe Riccio 27/////////////////////////////////////////////////////////////////////////////////// 28 29// Dependency: 30#include "quaternion.hpp" 31#include "../vector_relational.hpp" 32#include "../common.hpp" 33#include "../vec2.hpp" 34#include "../vec3.hpp" 35#include "../vec4.hpp" 36 37namespace glm 38{ 39 template <> 40 GLM_FUNC_QUALIFIER bool epsilonEqual 41 ( 42 float const & x, 43 float const & y, 44 float const & epsilon 45 ) 46 { 47 return abs(x - y) < epsilon; 48 } 49 50 template <> 51 GLM_FUNC_QUALIFIER bool epsilonEqual 52 ( 53 double const & x, 54 double const & y, 55 double const & epsilon 56 ) 57 { 58 return abs(x - y) < epsilon; 59 } 60 61 template <> 62 GLM_FUNC_QUALIFIER bool epsilonNotEqual 63 ( 64 float const & x, 65 float const & y, 66 float const & epsilon 67 ) 68 { 69 return abs(x - y) >= epsilon; 70 } 71 72 template <> 73 GLM_FUNC_QUALIFIER bool epsilonNotEqual 74 ( 75 double const & x, 76 double const & y, 77 double const & epsilon 78 ) 79 { 80 return abs(x - y) >= epsilon; 81 } 82 83 template <typename T, precision P, template <typename, precision> class vecType> 84 GLM_FUNC_QUALIFIER vecType<bool, P> epsilonEqual 85 ( 86 vecType<T, P> const & x, 87 vecType<T, P> const & y, 88 T const & epsilon 89 ) 90 { 91 return lessThan(abs(x - y), vecType<T, P>(epsilon)); 92 } 93 94 template <typename T, precision P, template <typename, precision> class vecType> 95 GLM_FUNC_QUALIFIER vecType<bool, P> epsilonEqual 96 ( 97 vecType<T, P> const & x, 98 vecType<T, P> const & y, 99 vecType<T, P> const & epsilon 100 ) 101 { 102 return lessThan(abs(x - y), vecType<T, P>(epsilon)); 103 } 104 105 template <typename T, precision P, template <typename, precision> class vecType> 106 GLM_FUNC_QUALIFIER vecType<bool, P> epsilonNotEqual 107 ( 108 vecType<T, P> const & x, 109 vecType<T, P> const & y, 110 T const & epsilon 111 ) 112 { 113 return greaterThanEqual(abs(x - y), vecType<T, P>(epsilon)); 114 } 115 116 template <typename T, precision P, template <typename, precision> class vecType> 117 GLM_FUNC_QUALIFIER vecType<bool, P> epsilonNotEqual 118 ( 119 vecType<T, P> const & x, 120 vecType<T, P> const & y, 121 vecType<T, P> const & epsilon 122 ) 123 { 124 return greaterThanEqual(abs(x - y), vecType<T, P>(epsilon)); 125 } 126 127 template <typename T, precision P> 128 GLM_FUNC_QUALIFIER detail::tvec4<bool, P> epsilonEqual 129 ( 130 detail::tquat<T, P> const & x, 131 detail::tquat<T, P> const & y, 132 T const & epsilon 133 ) 134 { 135 detail::tvec4<T, P> v(x.x - y.x, x.y - y.y, x.z - y.z, x.w - y.w); 136 return lessThan(abs(v), detail::tvec4<T, P>(epsilon)); 137 } 138 139 template <typename T, precision P> 140 GLM_FUNC_QUALIFIER detail::tvec4<bool, P> epsilonNotEqual 141 ( 142 detail::tquat<T, P> const & x, 143 detail::tquat<T, P> const & y, 144 T const & epsilon 145 ) 146 { 147 detail::tvec4<T, P> v(x.x - y.x, x.y - y.y, x.z - y.z, x.w - y.w); 148 return greaterThanEqual(abs(v), detail::tvec4<T, P>(epsilon)); 149 } 150}//namespace glm 151