I am using quaternions to represent orientation as a rotational offset from a global coordinate frame.

Is it correct in thinking that quaternion distance gives a metric that defines the closeness of two orientations? i.e. similar orientations give low distances, and dissimilar orientations give high distances.

Does zero distance mean that the orientations are exactly the same?

This seems obvious, but I want to ensure that there are no subtleties that get in the way of logic.

  • 1
    $\begingroup$ The quaternions are a normed vector space, thus $\|x-y\|=0$ implies $x-y=0$. That is, distance zero implies $x=y$. Any norm induces a metric, $d(x,y)=\|x-y\|$. So your question is, for quaterions $q_1,q_2$ which are close, is $q_1uq_1^{-1}$ close to $q_2uq_2^{-1}$ for vector $u \in \mathbb{R}^3$? I'm unsure how to answer this part of the question. $\endgroup$
    – dls
    Dec 10, 2011 at 1:29

1 Answer 1


First, I assume that you're using unit quaternions, i.e. quaternions $a+b\,\textbf{i}+c\,\textbf{j}+d\,\textbf{k}$ that satisfy $a^2 + b^2 + c^2 + d^2 = 1$. If not, you'll want to scale your quaternions before computing distance.

Distance between quaternions will correspond roughly to distance between orientations as long as the quaternions are fairly close to each other. However, if you're comparing quaternions globally, you should remember that $q$ and $-q$ always represent the same orientation, even though the distance between them is $2$.

There are better ways to compute the closeness of two orientations that avoid this problem. For example, the angle $\theta$ of rotation required to get from one orientation to another is given by the formula $$ \theta \;=\; \cos^{-1}\bigl(2\langle q_1,q_2\rangle^2 -1\bigr) $$ where $\langle q_1,q_2\rangle$ denotes the inner product of the corresponding quaternions: $$ \langle a_1 +b_1 \textbf{i} + c_1 \textbf{j} + d_1 \textbf{k},\; a_2 + b_2 \textbf{i} + c_2 \textbf{j} + d_2 \textbf{k}\rangle \;=\; a_1a_2 + b_1b_2 + c_1 c_2 + d_1d_2. $$ (This formula follows from the double-angle formula for cosine, together with the fact that the angle between orientations is precisely twice the angle between unit quaternions.)

If you want a notion of distance that can be computed without trig functions, the quantity $$ d(q_1,q_2) \;=\; 1 - \langle q_1,q_2\rangle^2 $$ is equal to $(1-\cos\theta)/2$, and gives a rough estimate of the distance. In particular, it gives $0$ whenever the quaternions represent the same orientation, and it gives $1$ whenever the two orientations are $180^\circ$ apart.

  • 3
    $\begingroup$ Should have been: $d(q_1,q_2) = 2\arccos(<q_1,q_2>)$ $\endgroup$ Jan 9, 2014 at 17:01
  • 3
    $\begingroup$ @mangledorf The formula I give for $\theta$ is correct in all cases. The formula $\theta = 2 \arccos(\langle q_1,q_2\rangle)$ doesn't work when $\langle q_1,q_2\rangle < 0$, although $\theta = 2\arccos(|\langle q_1q_2\rangle |)$ would be fine. $\endgroup$
    – Jim Belk
    Jan 9, 2014 at 17:56
  • 2
    $\begingroup$ @mangledorf Something like that, although it isn't possible to separate the two sheets of the cover. But $\langle q_1,q_2\rangle<0$ corresponds to the case where $-q_2$ is "closer" to $q_1$ than $q_2$ is. $\endgroup$
    – Jim Belk
    Jan 9, 2014 at 23:58
  • 4
    $\begingroup$ According to ["Metrics for 3D rotations: Comparison and Analysis"][1] which compares a number of metrics, you might want to use the geodesic distance of the normed quaternions, since these lie on the unit 3-sphere (the euclidean distance is not appropriate there). It so happens that it is exactly the formula for $\theta$ that @JimBelk mentions. [1]: dx.doi.org/10.1007/s10851-009-0161-2 $\endgroup$
    – yannick
    Apr 14, 2014 at 9:11
  • 2
    $\begingroup$ @JimBelk could it be possible to get a refference to where you got the formula of the angle between the two quaternions? I can see that the distance is equation 20 in the paper Yannick mentioned (dx.doi.org/10.1007/s10851-009-0161-2) but I cannot find the other one. $\endgroup$
    – apalomer
    May 15, 2018 at 10:02

You must log in to answer this question.

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