From ec88c2032420cad4920e516a176fb7866be9074f Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Sun, 21 May 2017 08:37:11 +0200 Subject: tracker/steamvr: fix formulae, pitch is/was broken @KydDynoMyte said on reddit pitch goes +180 on yaw over 90. It must be invalid matrix elements used in the call to atan2. Replace with the version from April. cf. https://www.reddit.com/r/Vive/comments/63qula/opentracks_almostdone_vive_support/dhrgh5l/?context=3 --- tracker-steamvr/steamvr.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tracker-steamvr/steamvr.cpp b/tracker-steamvr/steamvr.cpp index 3f0cd1d4..4cdec5e8 100644 --- a/tracker-steamvr/steamvr.cpp +++ b/tracker-steamvr/steamvr.cpp @@ -282,12 +282,13 @@ void steamvr::matrix_to_euler(double& yaw, double& pitch, double& roll, const vr { using std::atan2; using std::sqrt; + using std::asin; using d = double; yaw = atan2(d(result.m[2][0]), d(result.m[0][0])); - pitch = atan2(d(result.m[2][1]), d(result.m[2][2])); - roll = atan2(d(result.m[1][0]), d(result.m[0][0])); + pitch = atan2(-d(result.m[1][2]), d(result.m[1][1])); + roll = asin(d(result.m[1][0])); // TODO: gimbal lock avoidance? } -- cgit v1.2.3