So, here's a suggestion: implement a driver mode where you have translation vs. rotation dominance in addition to the existing single-axis dominance mode. When the translation data dominates the rotation data, we get pure translation (along all three axes), and when the rotation data dominates the translation data, we get pure rotation (along all three axes), and of course when there is no domination, we get all zeroes.
I've experimented a little bit with this mode (implemented in the firmware of my SpaceBall 4000 to USB adapter), and it seems to work quite intuitively. My algorithm was simply to count translation as dominant when
Code: Select all
tx^2+ty^2+tz^2 >= 4*(rx^2+ry^2+rz^2)
Code: Select all
rx^2+ry^2+rz^2 >= 4*(tx^2+ty^2+tz^2)