6
$\begingroup$

Given two vectors, a direction and an up: how do I construct a quaternion so that when a coordinate system is transformed by it, it's X-axis points in the original direction vector?

  • 0
    Quaternions encode rotation matrix, thus find the rotation matrix needed, and transcribe it into quaternion representation.2011-08-29

1 Answers 1

6

You can construct a quaternion to rotate a given normalized vector $\mathbf{v}$ onto a normalized vector $\mathbf{w}$ by taking the axis from the cross product and the angle from the dot product

$\mathbf{a}=\mathbf{v}\times\mathbf{w},\quad\quad\quad \theta = \arccos(\mathbf{v}\cdot\mathbf{w})$

and of course the usual axis-angle to quaternion conversion

$\mathbf{q}=(\cos\frac{\theta}{2}, \mathbf{a}\sin\frac{\theta}{2})$

But be aware that this rotates along the shortest path and therefore need not keep the up vector of your object. If you want to rotate around the normalized up-axis $\mathbf{u}$, then this is of course the rotation axis. But then you have to compute the angle in the plane perpendicular to the up-axis, so you first need to project the source and target vectors into this plane before taking their dot product, by using

$\mathbf{v}=\mathbf{v}-(\mathbf{v}\cdot\mathbf{u})\mathbf{u},\quad\quad\quad \mathbf{v}=\frac{\mathbf{v}}{\|\mathbf{v}\|}$

and the same for $\mathbf{w}$. Then you can compute the rotation as above.

  • 0
    Shouldn't $\mathbf{q}$ be a unit quaternion?2017-06-06