How do you rotate a vector by a unit quaternion?

174.7k Views Asked by At

Given a 3-variable right-handed vector v that is a translation measured in local space and a unit quaternion representing an orientation from local to world space, how do you use the quaternion to rotate the vector from local space to world space?

For ease of use, the values are:

Vector v = $[1.0, 0.0, 0.0]$

Quaternion $q = [W: 0.7071068, X: 0, Y: 0.7071068, Z: 0]$, which I understand to be a rotation $90^\circ (\frac{\pi}{2})$ around the $Y$-axis and which converts from the local space to the world space. (That is, the resulting vector is $[0.0, 0.0, 1.0]$, and if this was the nose of a spaceship, it'd be pointing to the right in world coordinates)

Thanks.

1

There are 1 best solutions below

10
On BEST ANSWER

You seem to be having a good deal of trouble with this, over several questions. At the same time, I am confident that you will get no satisfying answers as long as you stick with the terminology you are using. Maybe on the original stack overflow site, aimed at programmers.

Please read this: http://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation

and this: http://en.wikipedia.org/wiki/Quaternions

To answer not much more than your question, any quaternion is an expression $$ q = w + x \; \mathbf{i} + y \; \mathbf{j} + z \; \mathbf{k}.$$ where the multiplication rules use $$ \mathbf{i}^2 = \mathbf{j}^2 = \mathbf{k}^2 = \mathbf{i} \mathbf{j}\mathbf{k} = -1, $$ and consequences of those, see wikipedia as I said. Any quaternion $ q = w + x \; \mathbf{i} + y \; \mathbf{j} + z \; \mathbf{k}$ has a conjugate, that on wikipedia is written $q^\ast,$ given by $$ q^\ast = w - x \; \mathbf{i} - y \; \mathbf{j} - z \; \mathbf{k}.$$

The "norm" of the quaternion $q$ is exactly $$ \parallel q \parallel^2 = w^2 + x^2 + y^2 + z^2 = q q^\ast = q^\ast q$$

A quaternion $q$ is called a "unit" quaternion when $$ w^2 + x^2 + y^2 + z^2 = 1. $$

A quaternion is called "pure" or a vector in 3-space when $ w = 0,$ so a vector in 3-space is $$ v = v_1 \; \mathbf{i} + v_2 \; \mathbf{j} + v_3 \; \mathbf{k} $$ I have no idea what engineers and programmers call these concepts. You are asking mathematicians.

Given two quaternions, the norm of the product is the product of the norms.

The "real part" (the $w$) of the product of two quaternions $pq$ is the same as the "real part of $qp.$

So, what happens when I take a unit quaternion $q$ and a "pure" quaternion $v,$ and calculate $$ p = q^\ast v q.$$

Well, we have $$\parallel p \parallel = 1 \cdot \parallel v \parallel \cdot 1 = \parallel v \parallel $$

But as to the "real part," we begin with $$ \Re v = 0,$$

then $$ \Re q^\ast (v q) = \Re (v q) q^\ast = \Re v (q q^\ast) = \Re v = 0. $$

So $ p = q^\ast v q$ is another pure quaternion, another "vector," the same length as $v,$ but rotated from where it was.

That's enough for a start.