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 ? |
Hi Nicolas,
Good catch. I think the operation should be called #reversed (e.g., reversing the angle/axis of operation). Cheers, - Andreas nicolas cellier wrote: > 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 ? > > > |
Le Mercredi 08 Février 2006 02:52, Andreas Raab a écrit :
> Hi Nicolas, > > Good catch. I think the operation should be called #reversed (e.g., > reversing the angle/axis of operation). > > Cheers, > - Andreas I agree |
Free forum by Nabble | Edit this page |