diff --git a/modules/core/include/opencv2/core/quaternion.inl.hpp b/modules/core/include/opencv2/core/quaternion.inl.hpp index 29a16d9f7d..b901ecbc68 100644 --- a/modules/core/include/opencv2/core/quaternion.inl.hpp +++ b/modules/core/include/opencv2/core/quaternion.inl.hpp @@ -745,8 +745,8 @@ Quat Quat::lerp(const Quat &q0, const Quat &q1, const T t) template Quat Quat::slerp(const Quat &q0, const Quat &q1, const T t, QuatAssumeType assumeUnit, bool directChange) { - Quatd v0(q0); - Quatd v1(q1); + Quat v0(q0); + Quat v1(q1); if (!assumeUnit) { v0 = v0.normalize(); @@ -754,7 +754,7 @@ Quat Quat::slerp(const Quat &q0, const Quat &q1, const T t, QuatAssu } T cosTheta = v0.dot(v1); constexpr T DOT_THRESHOLD = 0.995; - if (cosTheta > DOT_THRESHOLD) + if (std::abs(cosTheta) > DOT_THRESHOLD) { return nlerp(v0, v1, t, QUAT_ASSUME_UNIT); } @@ -843,7 +843,7 @@ Quat Quat::interPoint(const Quat &q0, const Quat &q1, template Quat Quat::spline(const Quat &q0, const Quat &q1, const Quat &q2, const Quat &q3, const T t, QuatAssumeType assumeUnit) { - Quatd v0(q0), v1(q1), v2(q2), v3(q3); + Quat v0(q0), v1(q1), v2(q2), v3(q3); if (!assumeUnit) { v0 = v0.normalize();