0

I want to devide a rotation, which is expressed as a quaternion.

So I am doing it with Quaternion^POWER, where power is lower than 0.

See my question before: here

If I calculate following example with angles in degree for the axes x,y,z = 80,40,20:

Quaternion(w,x,y,z) q = Quaternion(0.671,0.640,0.342,0.153); // is qual to above rotations in degree

q^0.5 //corresponds to sqrt(q)

my result converted in to angles in degree

x rotation: 39,43

y rotation: 16,51

z rotation: 17.16

I would expect:

x rotation: 40

y rotation: 20

z rotation: 10

I am quite sure that my calculation(implementation made in java) is correct I have compared it with the this site (used square): here

Could someone explain this to me? Or could show me my mistake?

Thanks in advance!!

chris LB
  • 183

1 Answers1

2

Your results are correct (or at least, I believe they're correct); it's your expectations that are wrong. What you're tripping over is the non-commutativity of rotations; it's one reason why quaternions are generally preferred over e.g. Euler angles (which is what I presume you mean by your 'conversion to angles in degrees'). Seen from a different perspective, the square of the operation 'rotate $45^\circ$ about the X axis, then rotate $45^\circ$ about the Y axis' is not the operation 'rotate $90^\circ$ about the X axis, then rotate $90^\circ$ about the Y axis'; if we call the 45-degree rotations $X_{45}$ and $Y_{45}$ then the first operation is $X_{45}Y_{45}X_{45}Y_{45}$ and the second can be broken down as $X_{45}X_{45}Y_{45}Y_{45}$ (since a 90-degree rotation about the X axis is the same as two successive 45-degree rotations about that axis) — but the middle operations aren't equivalent: $Y_{45}X_{45}\neq X_{45}Y_{45}$.

Your case is just the converse of this - the fact that you can't get the double of a rotation (in Euler angles) by doubling the angles means that you shouldn't expect to be able to halve a rotation by halving the angles.