You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Performing minuscule rotations while having rotation line between fingers horizontal causes to getRotationDegreesDelta to output values close to 360, e.g. -359.4 or 359.2.
This is caused by Math.atan2 used to calculate diff angle having ambiguity around +-180*. All is fine and well when performed rotation is shown 1:1 on screen, but I'm scaling it to get more precise moment with small values, so when the received values are 0.015, 0.020, 0.017, -359.4, 0.021... it causes a sudden jerk.
IMO it's a bug because nobody expects sudden 360 for minuscule finger motion when calling getRotationDegreesDelta. The real change of angle is certainly NOT a 360 degree.
My workaround was:
val raw = detector.rotationDegreesDelta
val diffRotation = if (abs(raw) > 300) { // or some other arbitrary value above 180*
if (raw < 0) {
360 + raw
} else {
raw - 360
}
} else raw
I think better fix (without arbitrary 300* value) can be done on library side by checking if one angle falls close to 180* and other close to -180*, so it's passing through discontinous part of Math.atan2 and can be accounted for.
The text was updated successfully, but these errors were encountered:
Performing minuscule rotations while having rotation line between fingers horizontal causes to
getRotationDegreesDelta
to output values close to360
, e.g.-359.4
or359.2
.This is caused by
Math.atan2
used to calculate diff angle having ambiguity around+-180*
. All is fine and well when performed rotation is shown 1:1 on screen, but I'm scaling it to get more precise moment with small values, so when the received values are0.015
,0.020
,0.017
,-359.4
,0.021
... it causes a sudden jerk.IMO it's a bug because nobody expects sudden 360 for minuscule finger motion when calling
getRotationDegreesDelta
. The real change of angle is certainly NOT a 360 degree.My workaround was:
I think better fix (without arbitrary
300*
value) can be done on library side by checking if one angle falls close to180*
and other close to-180*
, so it's passing through discontinous part ofMath.atan2
and can be accounted for.The text was updated successfully, but these errors were encountered: