#include "scalar_constants.hpp" namespace glm { template GLM_FUNC_QUALIFIER T angle(qua const& x) { if (abs(x.w) > cos_one_over_two()) { return asin(sqrt(x.x * x.x + x.y * x.y + x.z * x.z)) * static_cast(2); } return acos(x.w) * static_cast(2); } template GLM_FUNC_QUALIFIER vec<3, T, Q> axis(qua const& x) { T const tmp1 = static_cast(1) - x.w * x.w; if(tmp1 <= static_cast(0)) return vec<3, T, Q>(0, 0, 1); T const tmp2 = static_cast(1) / sqrt(tmp1); return vec<3, T, Q>(x.x * tmp2, x.y * tmp2, x.z * tmp2); } template GLM_FUNC_QUALIFIER qua angleAxis(T const& angle, vec<3, T, Q> const& v) { T const a(angle); T const s = glm::sin(a * static_cast(0.5)); return qua(glm::cos(a * static_cast(0.5)), v * s); } }//namespace glm