diff --git a/Source/Core/Common/Matrix.cpp b/Source/Core/Common/Matrix.cpp index 724d28f17f..57be1a3cc4 100644 --- a/Source/Core/Common/Matrix.cpp +++ b/Source/Core/Common/Matrix.cpp @@ -78,7 +78,7 @@ Quaternion::Quaternion(float w, float x, float y, float z) : data(x, y, z, w) float Quaternion::Norm() const { - return data.Dot(data); + return std::sqrt(data.Dot(data)); } Quaternion Quaternion::Normalized() const diff --git a/Source/Core/Core/HW/WiimoteEmu/Dynamics.cpp b/Source/Core/Core/HW/WiimoteEmu/Dynamics.cpp index dd21cd721a..b3864e3c8b 100644 --- a/Source/Core/Core/HW/WiimoteEmu/Dynamics.cpp +++ b/Source/Core/Core/HW/WiimoteEmu/Dynamics.cpp @@ -398,7 +398,9 @@ Common::Quaternion GetRotationFromAcceleration(const Common::Vec3& accel) Common::Quaternion GetRotationFromGyroscope(const Common::Vec3& gyro) { - return Common::Quaternion{1, gyro.x / 2, gyro.y / 2, gyro.z / 2}; + const auto length = gyro.Length(); + return (length != 0) ? Common::Quaternion::Rotate(length, gyro / length) : + Common::Quaternion::Identity(); } Common::Matrix33 GetRotationalMatrix(const Common::Vec3& angle)