I seem to be making a mistake performing a quaternion rotation. Given two unit vectors $v$ and $w$, I want to compute the rotation between vector $v$, and $w$ and apply that same rotation vector $x$.

Let $\vec{v}$, $\vec{w}$, $\vec{x}$ be unit vectors. Let $\bf x$ be the quaternion representation of $\vec{x}$, $(0 + x_1i + x_2j + x_3k)$

I compute the following (where $\cdot$ represents the dot product and $\times$ represents the cross product):

$\vec{u} = \frac{\vec{v} \times \vec{w}}{\lVert \vec{v} \times \vec{w} \rVert}$

$\theta = acos(\vec{v} \cdot \vec{w})$

${\bf q} = cos(\theta / 2) + {\bf u} \cdot sin(\theta/2)$

${\bf q^{-1}} = cos(\theta / 2) - {\bf u} \cdot sin(\theta/2)$

I now expect that I can compute $x'$ such that:

$\vec{x} \cdot \vec{x}' = \vec{v} \cdot \vec{w}$

Where $x'$ is computed via quaternion multiplication:

${\bf x'} = {\bf qxq^{-1}}$

Did I make any faulty assumptions here? I'm not getting this result in practice and am not sure where I'm going wrong.

  • 2
    $\begingroup$ The identity you’re looking for only holds for vectors in the same plane as $\vec v$ and $\vec w$. Consider what happens if, for instance, you set $\vec x=\vec u$. $\endgroup$
    – amd
    Commented Aug 18, 2017 at 22:49
  • $\begingroup$ That pretty much covers all cases... does it answer your question David? $\endgroup$
    – rschwieb
    Commented Aug 19, 2017 at 1:08

1 Answer 1


[Turning my comment into an answer.]

The problem is that $\vec x\cdot\vec x'=\vec v\cdot\vec w$ is only true when $\vec x$ is coplanar with $\vec v$ and $\vec w$ (and the origin). If $\vec x$ is not in this plane, then the angle between it and its image after rotation will be less than the angle between $\vec p$ and $\vec q$. The extreme example of this is $\vec x=\vec u$ itself. Every rotation about $\vec u$ leaves it fixed, so the angle between $\vec x$ and $\vec x'$ is zero regardless of the rotation angle.

The reason for this is that a rotation acts only on the component of a vector that’s orthogonal to the rotation axis, i.e., on its projection onto a plane perpendicular to $\vec u$. Imagine a unit sphere with $\vec u$ as the north pole. $\vec v$ and $\vec w$ are then on its equator and the angle between them is the difference in their longitudes. For any other unit vector $\vec x$, the angle between the projections of $\vec x$ and $\vec x'$ onto the equatorial plane is indeed equal to the rotation angle—this again the difference in longitudes—but the angle between $\vec x$ and $\vec x'$ themselves is measured in the plane defined by them and the origin. The greater the latitude of $\vec x$, the smaller this true angle gets.


You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .