B3DRotation negated problem
nicolas cellier
ncellier at ifrance.com
Wed Feb 8 01:43:05 UTC 2006
I was looking for Quaternion in squeak and found B3DRotation. fine !
But the B3DRotation>>negated did hurt me.
This message is more than questionnable: it is mathematically incorrect.
Of course, if you think of the rotation vector angleInRadians*axis, then the
opposite rotation vector is either (-angleInRadians)*axis or
angleInRadians*(-axis), so far so good.
What if you multiply your rotations:
q negated * q, then you obtain the unitary quaternion (1 + 0 i + 0 j + 0 k).
If you multiply any B3DRotation with this unit quaternion, you get your
original B3DRotation. It is neutral to * operation.
This is definition of the reciprocal, not the negated.
if you could add q to q "negated", you would not get zero (+ can be trivially
defined in quaternions as in complex). You cannot do that operation
internally with unit quaternion, but you can with general quaternions.
True quaternion negated is (-a -b i - c j - d k).
There you see how bad it is.
In term of rotation matrix, this operation is the transposed, in term of
Quaternion this is the conjugated (more exaclty the conjugated negated in
your implementation), and in term of unit qaternion it is the reciprocal.
Yes but the opposite of my rotation vector ?
Well... try to sum two rotation vectors like 90° around [0 0 1] and then 90°
around [1 0 0], and tell me what do you get ? certainly not the composition
of the two rotations... The sum of rotation vectors have no meaning in term
of rotation except if same axis.
So forget about the negated, call it either reciprocal or conjugated or
transposed or schtroumph but please not negated.
Who will change that ?
More information about the Squeak-dev
mailing list
|