Unit quaternions, also known as versors, provide a convenient mathematical notation for representing space orientations and rotations of objects in three dimensions. Compared to Euler angles they are simpler to compose and avoid the problem of gimbal lock. Compared to rotation matrices they are more compact, more numerically stable, and more efficient. Quaternions have applications in computer graphics,^{[1]} computer vision, robotics,^{[2]} navigation, molecular dynamics, flight dynamics,^{[3]} orbital mechanics of satellites^{[4]} and crystallographic texture analysis.^{[5]}
When used to represent rotation, unit quaternions are also called rotation quaternions as they represent the 3D rotation group. When used to represent an orientation (rotation relative to a reference coordinate system), they are called orientation quaternions or attitude quaternions. The equation for spatial rotations can be summarized for radians about a unit axis as the Quaternion where and .
Introduction
Quaternions
The complex numbers can be defined by introducing an abstract symbol i which satisfies the usual rules of algebra and additionally the rule i^{2} = −1. This is sufficient to reproduce all of the rules of complex number arithmetic: for example:
In the same way the quaternions can be defined by introducing abstract symbols i, j, k which satisfy the rules i^{2} = j^{2} = k^{2} = i j k = −1 and the usual algebraic rules except the commutative law of multiplication (a familiar example of such a noncommutative multiplication is matrix multiplication). From this all of the rules of quaternion arithmetic follow, such as the rules on multiplication of quaternion basis elements. Using these rules, one can show that:
The imaginary part of a quaternion behaves like a vector in three dimension vector space, and the real part a behaves like a scalar in R. When quaternions are used in geometry, it is more convenient to define them as a scalar plus a vector:
Some might find it strange to add a number to a vector, as they are objects of very different natures, or to multiply two vectors together, as this operation is usually undefined. However, if one remembers that it is a mere notation for the real and imaginary parts of a quaternion, it becomes more legitimate. In other words, the correct reasoning is the addition of two quaternions, one with zero vector/imaginary part, and another one with zero scalar/real part:
We can express quaternion multiplication in the modern language of vector cross and dot products (which were actually inspired by the quaternions in the first place ^{[6]}). When multiplying the vector/imaginary parts, in place of the rules i^{2} = j^{2} = k^{2} = ijk = −1 we have the quaternion multiplication rule:
where:
 is the resulting quaternion,
 is vector cross product (a vector),
 is vector scalar product (a scalar).
Quaternion multiplication is noncommutative (because of the cross product, which anticommutes), while scalar–scalar and scalar–vector multiplications commute. From these rules it follows immediately that (see details):
The (left and right) multiplicative inverse or reciprocal of a nonzero quaternion is given by the conjugatetonorm ratio (see details):
as can be verified by direct calculation.
The quaternion rotation identity
Let be a unit vector (the rotation axis) and let . Our goal is to show that
yields the vector rotated by an angle around the axis . Expanding out, we have
where and are the components of v→ perpendicular and parallel to u→ respectively. This is the formula of a rotation by around the u→ axis.
Using quaternion as rotations
In 3dimensional space, according to Euler's rotation theorem, any rotation or sequence of rotations of a rigid body or coordinate system about a fixed point is equivalent to a single rotation by a given angle about a fixed axis (called the Euler axis) that runs through the fixed point. The Euler axis is typically represented by a unit vector u→. Therefore, any rotation in three dimensions can be represented as a combination of a vector u→ and a scalar . Quaternions give a simple way to encode this axis–angle representation in four numbers, and can be used to apply the corresponding rotation to a position vector, representing a point relative to the origin in R^{3}.
A Euclidean vector such as (2, 3, 4) or (a_{x}, a_{y}, a_{z}) can be rewritten as 2 i + 3 j + 4 k or a_{x} i + a_{y} j + a_{z} k, where i, j, k are unit vectors representing the three Cartesian axes. A rotation through an angle of around the axis defined by a unit vector
can be represented by a quaternion. This can be done using an extension of Euler's formula:
It can be shown that the desired rotation can be applied to an ordinary vector in 3dimensional space, considered as a quaternion with a real coordinate equal to zero, by evaluating the conjugation of p by q:
using the Hamilton product, where p′ = (p_{x}′, p_{y}′, p_{z}′) is the new position vector of the point after the rotation. In a programmatic implementation, this is achieved by constructing a quaternion whose vector part is p and real part equals zero and then performing the quaternion multiplication. The vector part of the resulting quaternion is the desired vector p′.
Mathematically, this operation carries the set of all "pure" quaternions p (those with real part equal to zero)—which constitute a 3dimensional space among the quaternions—into itself, by the desired rotation about the axis u, by the angle θ. (Each real quaternion is carried into itself by this operation. But for the purpose of rotations in 3dimensional space, we ignore the real quaternions.)
The rotation is clockwise if our line of sight points in the same direction as u→.
In this instance, q is a unit quaternion and
It follows that conjugation by the product of two quaternions is the composition of conjugations by these quaternions: If p and q are unit quaternions, then rotation (conjugation) by pq is
 ,
which is the same as rotating (conjugating) by q and then by p. The scalar component of the result is necessarily zero.
The quaternion inverse of a rotation is the opposite rotation, since . The square of a quaternion rotation is a rotation by twice the angle around the same axis. More generally q^{n} is a rotation by n times the angle around the same axis as q. This can be extended to arbitrary real n, allowing for smooth interpolation between spatial orientations; see Slerp.
Two rotation quaternions can be combined into one equivalent quaternion by the relation:
in which q′ corresponds to the rotation q_{1} followed by the rotation q_{2}. (Note that quaternion multiplication is not commutative.) Thus, an arbitrary number of rotations can be composed together and then applied as a single rotation.
Example
The conjugation operation
Conjugating p by q refers to the operation p ↦ qpq^{−1}.
Consider the rotation f around the axis , with a rotation angle of 120°, or 2π/3 radians.
The length of v→ is √3, the half angle is π/3 (60°) with cosine 1/2, (cos 60° = 0.5) and sine √3/2, (sin 60° ≈ 0.866). We are therefore dealing with a conjugation by the unit quaternion
If f is the rotation function,
It can be proven that the inverse of a unit quaternion is obtained simply by changing the sign of its imaginary components. As a consequence,
and
This can be simplified, using the ordinary rules for quaternion arithmetic, to
As expected, the rotation corresponds to keeping a cube held fixed at one point, and rotating it 120° about the long diagonal through the fixed point (observe how the three axes are permuted cyclically).
Quaternionderived rotation matrix
A quaternion rotation (with ) can be algebraically manipulated into a matrix rotation , where R is the rotation matrix given by:^{[7]}
Here and if q is a unit quaternion,
This can be obtained by using vector calculus and linear algebra if we express and as scalar and vector parts and use the formula for the multiplication operation in the equation . If we write as , as and as , where , our equation turns into . By using the formula for multiplication of two quaternions that are expressed as scalar and vector parts,
this equation can be rewritten as
where denotes the outer product, is the identity matrix and is the transformation matrix that when multiplied from the left with a vector gives the cross product .
Since , we can identify as , which upon expansion should result in the expression written in matrix form above.
Recovering the axisangle representation
The expression rotates any vector quaternion around an axis given by the vector by the angle , where and depends on the quaternion .
and can be found from the following equations:
where is the twoargument arctangent. Care should be taken when the quaternion approaches a scalar, since due to degeneracy the axis of an identity rotation is not welldefined.
The composition of spatial rotations
A benefit of the quaternion formulation of the composition of two rotations R_{B} and R_{A} is that it yields directly the rotation axis and angle of the composite rotation R_{C}=R_{B}R_{A}.
Let the quaternion associated with a spatial rotation R be constructed from its rotation axis S with the rotation angle φ around this axis. The associated quaternion is given by,
Then the composition of the rotation R_{B} with R_{A} is the rotation R_{C}=R_{B}R_{A} with rotation axis and angle defined by the product of the quaternions
that is
Expand this product to obtain
Divide both sides of this equation by the identity, which is the law of cosines on a sphere,
and compute
This is Rodrigues formula for the axis of a composite rotation defined in terms of the axes of the two rotations. He derived this formula in 1840 (see page 408).^{[8]}
The three rotation axes A, B, and C form a spherical triangle and the dihedral angles between the planes formed by the sides of this triangle are defined by the rotation angles. Hamilton^{[9]} presented the component form of these equations showing that the quaternion product computes the third vertex of a spherical triangle from two given vertices and their associated arclengths, which is also defines an algebra for points in Elliptic geometry.
The normalized rotation axis, removing the from the expanded product, leaves the vector which is the rotation axis, times some constant. Care should be taken when is or where the vector is near .
finally normalizing the rotation axis :.
Differentiation with respect to the rotation quaternion
The rotated quaternion p'=q p q^{−1} needs to be differentiated with respect to the rotating quaternion q , when the rotation is estimated from numerical optimization. The estimation of rotation angle is an essential procedure in 3D object registration or camera calibration. The derivative can be represented using the Matrix Calculus notation.
A derivation can be found in.^{[10]}
Quaternion rotation operations
A very formal explanation of the properties used in this section is given by Altman.^{[11]}
The hypersphere of rotations
Visualizing the space of rotations
Unit quaternions represent the group of Euclidean rotations in three dimensions in a very straightforward way. The correspondence between rotations and quaternions can be understood by first visualizing the space of rotations itself.
In order to visualize the space of rotations, it helps to consider a simpler case. Any rotation in three dimensions can be described by a rotation by some angle about some axis; for our purposes, we will use an axis vector to establish handedness for our angle. Consider the special case in which the axis of rotation lies in the xy plane. We can then specify the axis of one of these rotations by a point on a circle through which the vector crosses, and we can select the radius of the circle to denote the angle of rotation.
Similarly, a rotation whose axis of rotation lies in the xy plane can be described as a point on a sphere of fixed radius in three dimensions. Beginning at the north pole of a sphere in threedimensional space, we specify the point at the north pole to be the identity rotation (a zero angle rotation). Just as in the case of the identity rotation, no axis of rotation is defined, and the angle of rotation (zero) is irrelevant. A rotation having a very small rotation angle can be specified by a slice through the sphere parallel to the xy plane and very near the north pole. The circle defined by this slice will be very small, corresponding to the small angle of the rotation. As the rotation angles become larger, the slice moves in the negative z direction, and the circles become larger until the equator of the sphere is reached, which will correspond to a rotation angle of 180 degrees. Continuing southward, the radii of the circles now become smaller (corresponding to the absolute value of the angle of the rotation considered as a negative number). Finally, as the south pole is reached, the circles shrink once more to the identity rotation, which is also specified as the point at the south pole.
Notice that a number of characteristics of such rotations and their representations can be seen by this visualization. The space of rotations is continuous, each rotation has a neighborhood of rotations which are nearly the same, and this neighborhood becomes flat as the neighborhood shrinks. Also, each rotation is actually represented by two antipodal points on the sphere, which are at opposite ends of a line through the center of the sphere. This reflects the fact that each rotation can be represented as a rotation about some axis, or, equivalently, as a negative rotation about an axis pointing in the opposite direction (a socalled double cover). The "latitude" of a circle representing a particular rotation angle will be half of the angle represented by that rotation, since as the point is moved from the north to south pole, the latitude ranges from zero to 180 degrees, while the angle of rotation ranges from 0 to 360 degrees. (the "longitude" of a point then represents a particular axis of rotation.) Note however that this set of rotations is not closed under composition. Two successive rotations with axes in the xy plane will not necessarily give a rotation whose axis lies in the xy plane, and thus cannot be represented as a point on the sphere. This will not be the case with a general rotation in 3space, in which rotations do form a closed set under composition.
This visualization can be extended to a general rotation in 3dimensional space. The identity rotation is a point, and a small angle of rotation about some axis can be represented as a point on a sphere with a small radius. As the angle of rotation grows, the sphere grows, until the angle of rotation reaches 180 degrees, at which point the sphere begins to shrink, becoming a point as the angle approaches 360 degrees (or zero degrees from the negative direction). This set of expanding and contracting spheres represents a hypersphere in four dimensional space (a 3sphere). Just as in the simpler example above, each rotation represented as a point on the hypersphere is matched by its antipodal point on that hypersphere. The "latitude" on the hypersphere will be half of the corresponding angle of rotation, and the neighborhood of any point will become "flatter" (i.e. be represented by a 3D Euclidean space of points) as the neighborhood shrinks. This behavior is matched by the set of unit quaternions: A general quaternion represents a point in a four dimensional space, but constraining it to have unit magnitude yields a threedimensional space equivalent to the surface of a hypersphere. The magnitude of the unit quaternion will be unity, corresponding to a hypersphere of unit radius. The vector part of a unit quaternion represents the radius of the 2sphere corresponding to the axis of rotation, and its magnitude is the cosine of half the angle of rotation. Each rotation is represented by two unit quaternions of opposite sign, and, as in the space of rotations in three dimensions, the quaternion product of two unit quaternions will yield a unit quaternion. Also, the space of unit quaternions is "flat" in any infinitesimal neighborhood of a given unit quaternion.
Parameterizing the space of rotations
We can parameterize the surface of a sphere with two coordinates, such as latitude and longitude. But latitude and longitude are illbehaved (degenerate) at the north and south poles, though the poles are not intrinsically different from any other points on the sphere. At the poles (latitudes +90° and −90°), the longitude becomes meaningless.
It can be shown that no twoparameter coordinate system can avoid such degeneracy. We can avoid such problems by embedding the sphere in threedimensional space and parameterizing it with three Cartesian coordinates (w, x, y), placing the north pole at (w, x, y) = (1, 0, 0), the south pole at (w, x, y) = (−1, 0, 0), and the equator at w = 0, x^{2} + y^{2} = 1. Points on the sphere satisfy the constraint w^{2} + x^{2} + y^{2} = 1, so we still have just two degrees of freedom though there are three coordinates. A point (w, x, y) on the sphere represents a rotation in the ordinary space around the horizontal axis directed by the vector (x, y, 0) by an angle .
In the same way the hyperspherical space of 3D rotations can be parameterized by three angles (Euler angles), but any such parameterization is degenerate at some points on the hypersphere, leading to the problem of gimbal lock. We can avoid this by using four Euclidean coordinates w, x, y, z, with w^{2} + x^{2} + y^{2} + z^{2} = 1. The point (w, x, y, z) represents a rotation around the axis directed by the vector (x, y, z) by an angle
Explaining quaternions' properties with rotations
Noncommutativity
The multiplication of quaternions is noncommutative. This fact explains how the p ↦ q p q^{−1} formula can work at all, having q q^{−1} = 1 by definition. Since the multiplication of unit quaternions corresponds to the composition of threedimensional rotations, this property can be made intuitive by showing that threedimensional rotations are not commutative in general.
Set two books next to each other. Rotate one of them 90 degrees clockwise around the z axis, then flip it 180 degrees around the x axis. Take the other book, flip it 180° around x axis first, and 90° clockwise around z later. The two books do not end up parallel. This shows that, in general, the composition of two different rotations around two distinct spatial axes will not commute.
Orientation
The vector cross product, used to define the axis–angle representation, does confer an orientation ("handedness") to space: in a threedimensional vector space, the three vectors in the equation a × b = c will always form a righthanded set (or a lefthanded set, depending on how the cross product is defined), thus fixing an orientation in the vector space. Alternatively, the dependence on orientation is expressed in referring to such u→ that specifies a rotation as to axial vectors. In quaternionic formalism the choice of an orientation of the space corresponds to order of multiplication: ij = k but ji = −k. If one reverses the orientation, then the formula above becomes p ↦ q^{−1} p q, i.e., a unit q is replaced with the conjugate quaternion – the same behaviour as of axial vectors.
Alternative conventions
It is reported in ^{[12]} that the existence and continued usage of an alternative quaternion convention in the aerospace and, to a lesser extent, robotics community is incurring a significant and ongoing cost [sic]. This alternative convention is proposed by Shuster M.D. in ^{[13]}, and departs from tradition by reversing the definition for multiplying quaternion basis elements such that under Shuster's convention, whereas Hamilton's definition is .
Under Shuster's convention, the formula for multiplying two quaternions is altered such that
The formula for rotating a vector by a quaternion is altered to be
To identify the changes under Shuster's convention, see that the sign before the cross product is flipped from plus to minus.
Finally, the formula for converting a quaternion to a rotation matrix is altered to be
which is exactly the transpose of the rotation matrix converted under the traditional convention.
The table below groups applications by their adherence to either quaternion convention
Software applications by convention used
Hamilton multiplication convention  Shuster multiplication convention 


Microsoft DirectXMath Library 
While use of either convention does not impact the capability or correctness of applications thus created, the authors of ^{[14]} argued that the Shuster convention should be abandoned because it departs from the much older quaternion multiplication convention by Hamilton and may never be adopted by the mathematical or theoretical physics areas.
Comparison with other representations of rotations
Advantages of quaternions
The representation of a rotation as a quaternion (4 numbers) is more compact than the representation as an orthogonal matrix (9 numbers). Furthermore, for a given axis and angle, one can easily construct the corresponding quaternion, and conversely, for a given quaternion one can easily read off the axis and the angle. Both of these are much harder with matrices or Euler angles.
In video games and other applications, one is often interested in "smooth rotations", meaning that the scene should slowly rotate and not in a single step. This can be accomplished by choosing a curve such as the spherical linear interpolation in the quaternions, with one endpoint being the identity transformation 1 (or some other initial rotation) and the other being the intended final rotation. This is more problematic with other representations of rotations.
When composing several rotations on a computer, rounding errors necessarily accumulate. A quaternion that is slightly off still represents a rotation after being normalized: a matrix that is slightly off may not be orthogonal any more and is harder to convert back to a proper orthogonal matrix.
Quaternions also avoid a phenomenon called gimbal lock which can result when, for example in pitch/yaw/roll rotational systems, the pitch is rotated 90° up or down, so that yaw and roll then correspond to the same motion, and a degree of freedom of rotation is lost. In a gimbalbased aerospace inertial navigation system, for instance, this could have disastrous results if the aircraft is in a steep dive or ascent.
Conversion to and from the matrix representation
From a quaternion to an orthogonal matrix
The orthogonal matrix corresponding to a rotation by the unit quaternion z = a + b i + c j + d k (with  z  = 1) when postmultiplying with a column vector is given by
This rotation matrix is used on vector w as . The quaternion representation of this rotation is given by:
where is the conjugate of the quaternion , given by
Also, quaternion multiplication is defined as (assuming a and b are quaternions, like z above):
where the order a,b is important since the cross product of two vectors is not commutative.
From an orthogonal matrix to a quaternion
One must be careful when converting a rotation matrix to a quaternion, as several straightforward methods tend to be unstable when the trace (sum of the diagonal elements) of the rotation matrix is zero or very small. For a stable method of converting an orthogonal matrix to a quaternion, see the Quaternion subsection of the Rotation matrix article.
Fitting quaternions
The above section described how to recover a quaternion q from a 3×3 rotation matrix Q. Suppose, however, that we have some matrix Q that is not a pure rotation—due to roundoff errors, for example—and we wish to find the quaternion q that most accurately represents Q. In that case we construct a symmetric 4×4 matrix
and find the eigenvector (x, y, z, w) corresponding to the largest eigenvalue (that value will be 1 if and only if Q is a pure rotation). The quaternion so obtained will correspond to the rotation closest to the original matrix Q^{[dubious – discuss]}.^{[15]}
Performance comparisons
This section discusses the performance implications of using quaternions versus other methods (axis/angle or rotation matrices) to perform rotations in 3D.
Results
Method  Storage 

Rotation matrix  9 
Quaternion  3 or 4 (see below) 
Angle/axis  3 or 4 (see below) 
Only three of the quaternion components are independent, as a rotation is represented by a unit quaternion. For further calculation one usually needs all four elements, so all calculations would suffer additional expense from recovering the fourth component. Likewise, angle/axis can be stored in a threecomponent vector by multiplying the unit direction by the angle (or a function thereof), but this comes at additional computational cost when using it for calculations.
Method  # multiplies  # add/subtracts  total operations 

Rotation matrices  27  18  45 
Quaternions  16  12  28 
Method  # multiplies  # add/subtracts  # sin/cos  total operations  

Rotation matrix  9  6  0  15  
Quaternions *  Without intermediate matrix  15  15  0  30 
Quaternions *  With intermediate matrix  21  18  0  39 
Angle/axis  Without intermediate matrix  18  13  2  30 + 3 
Angle/axis  With intermediate matrix  21  16  2  37 + 2 
* Note: Quaternions can be implicitly converted to a rotationlike matrix (12 multiplies and 12 add/subtracts), which levels the following vectors rotating cost with the rotation matrix method
Used methods
There are three basic approaches to rotating a vector v→:
 Compute the matrix product of a 3×3 rotation matrix R and the original 3×1 column matrix representing v→. This requires 3 × (3 multiplications + 2 additions) = 9 multiplications and 6 additions, the most efficient method for rotating a vector.
 A rotation can be represented by a unitlength quaternion q = (w, r→) with scalar (real) part w and vector (imaginary) part r→. The rotation can be applied to a 3D vector v→ via the formula . This requires only 15 multiplications and 15 additions to evaluate (or 18 multiplications and 12 additions if the factor of 2 is done via multiplication.) This formula, originally thought to be used with axis/angle notation (Rodrigues' formula), can also be applied to quaternion notation. This yields the same result as the less efficient but more compact formula of quaternion multiplication .
 Use the angle/axis formula to convert an angle/axis to a rotation matrix R then multiplying with a vector, or, similarly, use a formula to convert quaternion notation to a rotation matrix, then multiplying with a vector. Converting the angle/axis to R costs 12 multiplies, 2 function calls (sin, cos), and 10 add/subtracts; from item 1, rotating using R adds an additional 9 multiplications and 6 additions for a total of 21 multiplies, 16 add/subtracts, and 2 function calls (sin, cos). Converting a quaternion to R costs 12 multiplies and 12 add/subtracts; from item 1, rotating using R adds an additional 9 multiplications and 6 additions for a total of 21 multiplies and 18 add/subtracts.
Method  # multiplies  # add/subtracts  # sin/cos  total operations  

Rotation matrix  9n  6n  0  15n  
Quaternions *  Without intermediate matrix  15n  15n  0  30n 
Quaternions *  With intermediate matrix  9n + 12  6n + 12  0  15n + 24 
Angle/axis  Without intermediate matrix  18n  12n + 1  2  30n + 3 
Angle/axis  With intermediate matrix  9n + 12  6n + 10  2  15n + 24 
Pairs of unit quaternions as rotations in 4D space
A pair of unit quaternions z_{l} and z_{r} can represent any rotation in 4D space. Given a four dimensional vector v→, and assuming that it is a quaternion, we can rotate the vector v→ like this:
The pair of matrices represents a rotation of ℝ^{4}. Note that since , the two matrices must commute. Therefore, there are two commuting subgroups of the set of four dimensional rotations. Arbitrary four dimensional rotations have 6 degrees of freedom, each matrix represents 3 of those 6 degrees of freedom.
Since the generators of the fourdimensional rotations can be represented by pairs of quaternions (as follows), all fourdimensional rotations can also be represented.
See also
 Antitwister mechanism
 Binary polyhedral group
 Biquaternion
 Charts on SO(3)
 Clifford algebras
 Conversion between quaternions and Euler angles
 Covering space
 Dual quaternion
 Dual complex number
 Elliptic geometry
 Rotation formalisms in three dimensions
 Rotation (mathematics)
 Spin group
 Slerp, spherical linear interpolation
 Olinde Rodrigues
 William Rowan Hamilton
References
 ^ Shoemake, Ken (1985). "Animating Rotation with Quaternion Curves" (PDF). Computer Graphics. 19 (3): 245–254. doi:10.1145/325165.325242. Presented at SIGGRAPH '85.
 ^ J. M. McCarthy, 1990, Introduction to Theoretical Kinematics, MIT Press
 ^ Amnon Katz (1996) Computational Rigid Vehicle Dynamics, Krieger Publishing Co. ISBN 9781575240169
 ^ J. B. Kuipers (1999) Quaternions and rotation Sequences: a Primer with Applications to Orbits, Aerospace, and Virtual Reality, Princeton University Press ISBN 9780691102986
 ^ Karsten Kunze, Helmut Schaeben (November 2004). "The Bingham Distribution of Quaternions and Its Spherical Radon Transform in Texture Analysis". Mathematical Geology. 36 (8): 917–943. doi:10.1023/B:MATG.0000048799.56445.59. S2CID 55009081.
 ^ Altmann, Simon L. (1989). "Hamilton, Rodrigues, and the Quaternion Scandal". Mathematics Magazine. 62 (5): 306. doi:10.2307/2689481. JSTOR 2689481.
 ^ "comp.graphics.algorithms FAQ". Retrieved 2 July 2017.
 ^ Rodrigues, O. (1840), Des lois géométriques qui régissent les déplacements d'un système solide dans l'espace, et la variation des coordonnées provenant de ses déplacements con sidérés indépendamment des causes qui peuvent les produire, Journal de Mathématiques Pures et Appliquées de Liouville 5, 380–440.
 ^ William Rowan Hamilton (1844 to 1850) On quaternions or a new system of imaginaries in algebra, Philosophical Magazine, link to David R. Wilkins collection at Trinity College, Dublin
 ^ Lee, ByungUk (1991), "Differentiation with Quaternions, Appendix B" (PDF), Ph. D. Thesis, Stereo Matching of Skull Landmarks, Stanford University: 57–58
 ^ Simon L. Altman (1986) Rotations, Quaternions, and Double Groups, Dover Publications (see especially Ch. 12).
 ^ Sommer, H. (2018), "Why and How to Avoid the Flipped Quaternion Multiplication", Aerospace, 5 (3): 72, arXiv:1801.07478, doi:10.3390/aerospace5030072, ISSN 22264310
 ^ Shuster, M.D (1993), "A Survey of attitude representations", Journal of the Astronautical Sciences, 41 (4): 439–517, Bibcode:1993JAnSc..41..439S, ISSN 00219142
 ^ Sommer.
 ^ BarItzhack, Itzhack Y. (Nov–Dec 2000), "New method for extracting the quaternion from a rotation matrix", AIAA Journal of Guidance, Control and Dynamics, 23 (6): 1085–1087, Bibcode:2000JGCD...23.1085B, doi:10.2514/2.4654, ISSN 07315090
 ^ Eberly, D., Rotation Representations and performance issues
 ^ "Bitbucket". bitbucket.org.
 Grubin, Carl (1970). "Derivation of the quaternion scheme via the Euler axis and angle". Journal of Spacecraft and Rockets. 7 (10): 1261–1263. Bibcode:1970JSpRo...7.1261G. doi:10.2514/3.30149.
 BatteyPratt, E. P.; Racey, T. J. (1980). "Geometric Model for Fundamental Particles". International Journal of Theoretical Physics. 19 (6): 437–475. Bibcode:1980IJTP...19..437B. doi:10.1007/BF00671608. S2CID 120642923.
 Arribas, M.; Elipe, A.; Palacios, M. (2006). "Quaternions and the rotations of a rigid body". Celest. Mech. Dyn. Astron. 96 (3–4): 239–251. Bibcode:2006CeMDA..96..239A. doi:10.1007/s1056900690376. S2CID 123591599.
External links and resources
 Shoemake, Ken. "Quaternions" (PDF).
 "Simple Quaternion type and operations in over thirty computer languages". on Rosetta Code
 Hart, John C. "Quaternion Demonstrator".
 Dam, Eik B.; Koch, Martin; Lillholm, Martin (1998). "Quaternions, Interpolation and Animation" (PDF).
 Leandra, Vicci (2001). "Quaternions and Rotations in 3Space: The Algebra and its Geometric Interpretation" (PDF).
 Howell, Thomas; Lafon, JeanClaude (1975). "The Complexity of the Quaternion Product, TR75245" (PDF). Cornell University.
 Horn, Berthold K.P. (2001). "Some Notes on Unit Quaternions and Rotation" (PDF).
 Lee, ByungUk (1991). Unit Quaternion Representation of Rotation  Appendix A, Differentiation with Quaternions  Appendix B (PDF) (Ph. D. Thesis). Stanford University.
 Vance, Rod. "Some examples of connected Lie groups".
 "Visual representation of quaternion rotation".