Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"Distance" (or angular magnitude) between two quaternions?

I want to find the "distance" between two quaternions. By "distance" I mean a single float or int, not another quaternion (that would be the difference, i.e. inverse(q1)*q2). I guess you could call what I want "angular magnitude".

I need to apply more torque to a physics object the further it's rotated from its original angle.

I don't understand the maths involved in quaternions, so a code-based example would be most helpful. I've looked at several other questions but I don't believe any answer my question, or at least not in a way I understand it.

like image 292
Clonkex Avatar asked Apr 24 '14 06:04

Clonkex


2 Answers

Find the difference quaternion qd = inverse(q1)*q2).

Than find the angle between q1 and q2 by angle = 2 * atan2(qd.vec().length(), qd.w()) // NOTE: signed

The "angle" here, is the angle of rotation from q1 to q2 by shortest arc.

like image 134
minorlogic Avatar answered Oct 22 '22 11:10

minorlogic


Also you can use this lib function from pyquaternion. Quaternion.absolute_distance(q0, q1)

like image 42
FirePower Avatar answered Oct 22 '22 11:10

FirePower