View Full Version : Rotating 3D Vectors by Quaternions

04 April 2005, 08:11 AM
Hey guys,

Can anyone tell me exactly how you rotate a 3D vector by a quaternion?
I know it's something like:
v1 = qr * v * (inverse qr)
But how the hell do you multiply a 4D quaternion and a 3D vector?!?

Thanks in advance.

04 April 2005, 09:39 AM
You don't. Quaternions are just a useful intermediary way of storing/updating the rotation. To actually perform that rotation on a 3-space you'll need to construct a transformation matrix from the quaternion, then apply that matrix to your vector.

This page ( contains some good info on quaternions and their representation in 3D.

04 April 2005, 09:42 AM
But at the end of this ( article ( they say it is possible.

04 April 2005, 11:34 AM
Before multiplying you have to "convert" the vector into a quaternion which is simply done by setting the imaginary part (x,y,z) to your vector and the real part w to 0.
See also (equation 30).

- Matthias -

04 April 2005, 01:21 PM
You treat the vector you want to rotate as a quaternion with the scalar part 0.

#include <ImathVec.h>
#include <ImathQuat.h>

// rotate v by q
template <class T>
inline Imath::Vec3<T> rotate(const Imath::Vec3<T> &v, const Imath::Quat<T> &q) {
return (q*Imath::Quat<T>((T)0.0,v)*q.inverse()).v;

04 April 2005, 01:41 PM
Thanks craigd. :thumbsup:

CGTalk Moderation
04 April 2005, 01:41 PM
This thread has been automatically closed as it remained inactive for 12 months. If you wish to continue the discussion, please create a new thread in the appropriate forum.