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 Aug 18 '17 at 22:49
  • $\begingroup$ That pretty much covers all cases... does it answer your question David? $\endgroup$ – rschwieb Aug 19 '17 at 1:08

[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.

| cite | improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.