Quaternion: Difference between revisions
(25 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
Quaternions are a number system which can be used to represent [[rotations]] in 3D space. | Quaternions are a number system which can be used to represent [[rotations]] in 3D space. | ||
Double quaternion allows representing 4D rotations using two quaternions. | |||
[[Dual quaternion]] allows represent both rotations and translations in 3D space. | |||
The algebra of quaternions, double quaternions, and dual quaternions is called Clifford algebras. | |||
==Background== | ==Background== | ||
Line 8: | Line 11: | ||
The conjugate is <math>\bar{q} = (q_0, -\mathbf{q})</math>. | The conjugate is <math>\bar{q} = (q_0, -\mathbf{q})</math>. | ||
===Multiplication=== | ===Multiplication=== | ||
Multiplication is <math>q * p = (q_0 p_0 - \mathbf{q} \cdot \mathbf{p}, q_0 \mathbf{p} + p_0 \mathbf{q} + \mathbf{q} \times \mathbf{p})</math>. | Multiplication is <math>q*p = (q_0 p_0 - \mathbf{q} \cdot \mathbf{p}, q_0 \mathbf{p} + p_0 \mathbf{q} + \mathbf{q} \times \mathbf{p})</math>. | ||
Similar to imaginary numbers, <math>\mathbf{i}^2=\mathbf{j}^2=\mathbf{k}^2=\mathbf{i}\mathbf{j}\mathbf{k}=-1</math>. | Similar to imaginary numbers, <math>\mathbf{i}^2=\mathbf{j}^2=\mathbf{k}^2=\mathbf{i}\mathbf{j}\mathbf{k}=-1</math>. | ||
Line 19: | Line 22: | ||
===Rotations=== | ===Rotations=== | ||
Quadratically conjugating a quaternion as follows is equivalent to applying a rotation on <math>\mathbf{x}=(x,y,z)</math>: | Quadratically conjugating a quaternion as follows is equivalent to applying a rotation on <math>\mathbf{x}=(x,y,z)</math>: | ||
<math display="block">q * (c,x,y,z)*\bar{q} = (c, R(q) \cdot \mathbf{x})</math> | <math display="block">\mathbf{q} * (c,x,y,z)*\bar{\mathbf{q}} = (c, R(\mathbf{q}) \cdot \mathbf{x})</math> | ||
Here, <math>R(q)=R(-q)</math> is a two-to-one mapping from quaternions to 3x3 rotation matrices. | Here, <math>R(q)=R(-q)</math> is a two-to-one mapping from quaternions to 3x3 rotation matrices. | ||
Line 25: | Line 28: | ||
<math>R(q*p) = R(q) \cdot R(p)</math> | <math>R(q*p) = R(q) \cdot R(p)</math> | ||
The quaternion <math>q=(\cos(\theta | The quaternion <math>q=(\cos(\frac{\theta}{2}), \hat{n}_1 \sin(\frac{\theta}{2}), \hat{n}_2 \sin(\frac{\theta}{2}), \hat{n}_3 \sin(\frac{\theta}{2}))=\cos(\frac{\theta}{2}) + \sin(\frac{\theta}{2}) \mathbf{\hat{n}}</math> is equivalent to the rotation around axis <math>\hat{n}</math> by angle <math>\theta</math>. | ||
===Slurp=== | ===Slurp=== | ||
Line 37: | Line 40: | ||
There are multiple ways to calculate the distance between two quaternions. See [https://math.stackexchange.com/questions/90081/quaternion-distance Stackexchange]. | There are multiple ways to calculate the distance between two quaternions. See [https://math.stackexchange.com/questions/90081/quaternion-distance Stackexchange]. | ||
* <math>\theta = \cos^{-1}( \langle q_1, q_2 \rangle)</math> | * <math>\theta = \cos^{-1}( \langle q_1, q_2 \rangle)</math> | ||
** Note that this loss can be misleading for rotations because of double cover: | |||
** <math>R(q_1) = R(-q_1)</math> but <math>\cos^{-1}(x) \neq \cos^{-1}(-x)</math> | |||
** Thus some people use the distance below. | |||
* <math>\theta = \cos^{-1}(2 \langle q_1, q_2 \rangle^2 - 1)</math> | * <math>\theta = \cos^{-1}(2 \langle q_1, q_2 \rangle^2 - 1)</math> | ||
Line 104: | Line 110: | ||
\mathbf{S}_{\text{chord}} = \sum_{k=1}^{N}\left( \min( \Vert (q*p_k) - r_k \Vert, \Vert (q*p_k)+r_k \Vert ) \right)^2 | \mathbf{S}_{\text{chord}} = \sum_{k=1}^{N}\left( \min( \Vert (q*p_k) - r_k \Vert, \Vert (q*p_k)+r_k \Vert ) \right)^2 | ||
</math> | </math> | ||
==Double Quaternions== | |||
Note that double quaternions are different from dual quaternions. | |||
Double quaternions are written as <math>q_1 + \epsilon q_2</math> with <math>\epsilon^2 = 1</math> and applied to a quaternion <math>p</math> representing a point as <math>q_1 p \bar{q}_2</math>. | |||
Dual quaternions are written as <math>q_1 + \varepsilon q_2</math> with <math>\varepsilon^2 = 0</math> and applied to a dual quaternion <math>p</math> representing a point as <math>(q_1 + \varepsilon q_2) p (\bar{q}_1 + \varepsilon \bar{q}_2)</math> | |||
===Cayley Factorization=== | |||
See [Federico Thomas]. | |||
Any 4D rotation matrix can be decomposed into a right and a left isoclinic rotation matrix: | |||
<math>R = R^L R^R = R^R R^L</math> | |||
<math>R^R</math> and <math>R^L</math> can be viewed as a matrix representation of single double quaternion <math>(q_1, q_2)</math>. | |||
For a double quaternion, the 4D rotation written is <math>x' = q_1 x q_2</math>. | |||
The product of left and right isoclinic rotation matrices commute. | |||
Furthermore, the product of two left isoclinic rotation matrices is a left isoclinic rotation matrix. Same with right. | |||
Thus, <math>R_1 R_2 = (R_1^L R_1^R) (R_2^L R_2^R) = (R_1^L R_2^L) (R_1^R R_2^R) = R</math>. | |||
This shows that the composition of two double quaternions will be a double quaternion. | |||
===Approximating 3D Translations using Double quaternions=== | |||
See Ge ''et. al.''<ref name="ge1998double"></ref> | |||
<!-- {{hidden | Algebraic Verification | | |||
Suppose our point is <math>\mathbf{x} \in \mathbb{R}^3</math> and our translation has direction <math>\mathbf{d} \in \mathbb{R}^3</math> with distance <math>d</math>. | |||
Let <math>q=1+\frac{d}{2}\mathbf{n}</math> and <math>q^* = 1-\frac{d}{2}\mathbf{n}</math>. | |||
<math> | |||
\begin{aligned} | |||
q(1+\mathbf{x})(q^*)^* &= (1+\frac{d}{2}\mathbf{n})(1+\mathbf{x})(1+\frac{d}{2}\mathbf{n})\\ | |||
&= [(1 - \frac{d}{2} \mathbf{n} \cdot \mathbf{x}) + (\frac{d}{2}\mathbf{n} + \mathbf{x} + \frac{d}{2}\mathbf{n} \times \mathbf{x})](1+\frac{d}{2}\mathbf{n})\\ | |||
&= \left(1 - \frac{d}{2} \mathbf{n} \cdot \mathbf{x} - ((\frac{d}{2}\mathbf{n} + \mathbf{x} + \frac{d}{2}\mathbf{n} \times \mathbf{x})) \cdot \frac{d}{2} \mathbf{n}\right) + \left(\frac{d}{2}\mathbf{n} + \mathbf{x} + \frac{d}{2}\mathbf{n} \times \mathbf{x} +\frac{d}{2}\mathbf{n} + (\frac{d}{2}\mathbf{n} + \mathbf{x} + \frac{d}{2}\mathbf{n} \times \mathbf{x})\times(\frac{d}{2}\mathbf{n})\right)\\ | |||
&= c + \left(d\mathbf{n} + \mathbf{x} + \frac{d}{2}\mathbf{n} \times \mathbf{x} + (\frac{d}{2}\mathbf{n}\times(\frac{d}{2}\mathbf{n}) + \mathbf{x}\times(\frac{d}{2}\mathbf{n}) + (\frac{d}{2}\mathbf{n} \times \mathbf{x})\times(\frac{d}{2}\mathbf{n}))\right)\\ | |||
&= c + \left(d\mathbf{n} + \mathbf{x} + \frac{d}{2}\mathbf{n} \times \mathbf{x} + (0 + \mathbf{x}\times(\frac{d}{2}\mathbf{n}) + 0)\right)\\ | |||
&= c + \left(d\mathbf{n} + \mathbf{x} + \frac{d}{2}\mathbf{n} \times \mathbf{x} - \frac{d}{2}\mathbf{n}\times \mathbf{x}\right)\\ | |||
&= c + \left(\mathbf{x} + d\mathbf{n}\right)\\ | |||
\end{aligned} | |||
</math> | |||
}} --> | |||
==Dual Quaternions== | |||
{{main | Dual quaternion}} | |||
Dual quaternions are used to represent 3D rotations and translations together. | |||
==Combined Point + Frame Alignment Problem== | ==Combined Point + Frame Alignment Problem== | ||
Line 118: | Line 168: | ||
==Resources== | ==Resources== | ||
* [https://arxiv.org/pdf/1804.03528.pdf The Quaternion-Based Spatial Coordinate and Orientation Frame Alignment Problems by Andrew Hanson] [https://journals.iucr.org/a/issues/2020/04/00/ib5072/ib5072.pdf Edited Paper] | * [https://arxiv.org/pdf/1804.03528.pdf The Quaternion-Based Spatial Coordinate and Orientation Frame Alignment Problems by Andrew Hanson] [https://journals.iucr.org/a/issues/2020/04/00/ib5072/ib5072.pdf Edited Paper] | ||
* [https://www.researchgate.net/publication/265550132_Approaching_Dual_Quaternions_From_Matrix_Algebra Approaching Dual Quaternions From Matrix Algebra by Federico Thomas] | |||
* Double Quaternions for Motion Interpolation by Q.J. Ge, Amitabh Varshney, Jai P. Menon, Chu-Fei Chang | |||
* [https://probablydance.com/2017/08/05/intuitive-quaternions/ Less Weird Quaternions by Malte Skarupke] | |||
** Derives rotations as a sequence of reflection and quaternion algebra from wedge products. | |||
** Presents quaternions as a sequence of (90 deg rotation + scaling) operations in 3D space. | |||
==References== | |||
{{reflist|refs= | |||
<ref name="ge1998double">Q.J. Ge, Amitabh Varshney, Jai P. Menon, Chu-Fei Chang (1998) Double Quaternions for Motion Interpolation</ref> | |||
}} |