5 template<
typename T, qualifier Q>
9 T
const Angle = glm::length(u);
10 if (Angle < epsilon<T>())
17 template<
typename T, qualifier Q>
21 T Vec3Len = length(u);
23 if (Vec3Len < epsilon<T>())
25 if(q.w >
static_cast<T
>(0))
26 return qua<T, Q>(
log(q.w),
static_cast<T
>(0),
static_cast<T
>(0),
static_cast<T
>(0));
27 else if(q.w <
static_cast<T
>(0))
28 return qua<T, Q>(
log(-q.w), pi<T>(),
static_cast<T
>(0),
static_cast<T
>(0));
30 return qua<T, Q>(std::numeric_limits<T>::infinity(), std::numeric_limits<T>::infinity(), std::numeric_limits<T>::infinity(), std::numeric_limits<T>::infinity());
34 T t = atan(Vec3Len, T(q.w)) / Vec3Len;
35 T QuatLen2 = Vec3Len * Vec3Len + q.w * q.w;
36 return qua<T, Q>(
static_cast<T
>(0.5) *
log(QuatLen2), t * q.x, t * q.y, t * q.z);
40 template<
typename T, qualifier Q>
45 if(y > -epsilon<T>() && y < epsilon<T>())
49 T magnitude =
sqrt(x.x * x.x + x.y * x.y + x.z * x.z + x.w *x.w);
52 if(abs(x.w / magnitude) > cos_one_over_two<T>())
58 T VectorMagnitude = x.x * x.x + x.y * x.y + x.z * x.z;
59 if (
glm::abs(VectorMagnitude -
static_cast<T
>(0)) < glm::epsilon<T>()) {
64 Angle =
asin(
sqrt(VectorMagnitude) / magnitude);
69 Angle =
acos(x.w / magnitude);
72 T NewAngle = Angle * y;
73 T Div =
sin(NewAngle) /
sin(Angle);
74 T Mag =
pow(magnitude, y -
static_cast<T
>(1));
75 return qua<T, Q>(
cos(NewAngle) * magnitude * Mag, x.x * Div * Mag, x.y * Div * Mag, x.z * Div * Mag);
78 template<
typename T, qualifier Q>
81 return pow(x,
static_cast<T
>(0.5));
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 > pow(vec< L, T, Q > const &base, vec< L, T, Q > const &exponent)
Definition func_exponential.inl:72
GLM_FUNC_QUALIFIER vec< L, T, Q > log(vec< L, T, Q > const &x)
Definition func_exponential.inl:88
GLM_FUNC_QUALIFIER vec< L, T, Q > exp(vec< L, T, Q > const &x)
Definition func_exponential.inl:80
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 > cos(vec< L, T, Q > const &v)
Definition func_trigonometric.inl:50
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
Core features
Definition common.hpp:21
Definition type_quat.hpp:20
Definition qualifier.hpp:35