Clutter Engine 0.0.1
Loading...
Searching...
No Matches
quaternion_trigonometric.inl
2
3namespace glm
4{
5 template<typename T, qualifier Q>
6 GLM_FUNC_QUALIFIER T angle(qua<T, Q> const& x)
7 {
8 if (abs(x.w) > cos_one_over_two<T>())
9 {
10 return asin(sqrt(x.x * x.x + x.y * x.y + x.z * x.z)) * static_cast<T>(2);
11 }
12
13 return acos(x.w) * static_cast<T>(2);
14 }
15
16 template<typename T, qualifier Q>
17 GLM_FUNC_QUALIFIER vec<3, T, Q> axis(qua<T, Q> const& x)
18 {
19 T const tmp1 = static_cast<T>(1) - x.w * x.w;
20 if(tmp1 <= static_cast<T>(0))
21 return vec<3, T, Q>(0, 0, 1);
22 T const tmp2 = static_cast<T>(1) / sqrt(tmp1);
23 return vec<3, T, Q>(x.x * tmp2, x.y * tmp2, x.z * tmp2);
24 }
25
26 template<typename T, qualifier Q>
27 GLM_FUNC_QUALIFIER qua<T, Q> angleAxis(T const& angle, vec<3, T, Q> const& v)
28 {
29 T const a(angle);
30 T const s = glm::sin(a * static_cast<T>(0.5));
31
32 return qua<T, Q>(glm::cos(a * static_cast<T>(0.5)), v * s);
33 }
34}//namespace glm
GLM_FUNC_DECL GLM_CONSTEXPR genType abs(genType x)
GLM_FUNC_QUALIFIER vec< L, T, Q > sqrt(vec< L, T, Q > const &x)
Definition func_exponential.inl:128
GLM_FUNC_QUALIFIER vec< L, T, Q > sin(vec< L, T, Q > const &v)
Definition func_trigonometric.inl:41
GLM_FUNC_QUALIFIER vec< L, T, Q > asin(vec< L, T, Q > const &v)
Definition func_trigonometric.inl:68
GLM_FUNC_QUALIFIER vec< L, T, Q > acos(vec< L, T, Q > const &v)
Definition func_trigonometric.inl:77
GLM_FUNC_DECL T angle(qua< T, Q > const &x)
Definition quaternion_trigonometric.inl:6
GLM_FUNC_DECL vec< 3, T, Q > axis(qua< T, Q > const &x)
Definition quaternion_trigonometric.inl:17
GLM_FUNC_DECL qua< T, Q > angleAxis(T const &angle, vec< 3, T, Q > const &axis)
Definition quaternion_trigonometric.inl:27
GLM_FUNC_DECL GLM_CONSTEXPR genType cos_one_over_two()
Return the value of cos(1 / 2) for floating point types.
Definition scalar_constants.inl:20
Core features
Definition common.hpp:21
Definition type_quat.hpp:20
Definition qualifier.hpp:35