From Wikipedia, the free encyclopedia  View original article
In linear algebra, a rotation matrix is a matrix that is used to perform a rotation in Euclidean space. For example the matrix
rotates points in the xyCartesian plane counterclockwise through an angle θ about the origin of the Cartesian coordinate system. To perform the rotation using a rotation matrix R, the position of each point must be represented by a column vector v, containing the coordinates of the point. A rotated vector is obtained by using the matrix multiplication Rv.
Rotation matrices also provide a means of numerically representing an arbitrary rotation of the axes about the origin, without appealing to angular specification. These coordinate rotations are a natural way to express the orientation of a camera, or the attitude of a spacecraft, relative to a reference axesset. Once an observational platform's local XYZ axes are expressed numerically as three direction vectors in world coordinates, they together comprise the columns of the rotation matrix R (world → platform) that transforms directions (expressed in world coordinates) into equivalent directions expressed in platformlocal coordinates.
The examples in this article apply to active rotations of vectors counterclockwise in a righthanded coordinate system by premultiplication. If any one of these is changed (e.g. rotating axes instead of vectors, i.e. a passive transformation), then the inverse of the example matrix should be used, which coincides precisely with its transpose.
Since matrix multiplication has no effect on the zero vector (the coordinates of the origin), rotation matrices can only be used to describe rotations about the origin of the coordinate system. Rotation matrices provide an algebraic description of such rotations, and are used extensively for computations in geometry, physics, and computer graphics.
Rotation matrices are square matrices, with real entries. More specifically they can be characterized as orthogonal matrices with determinant 1,
In some literature, the term rotation is generalized to include improper rotations, characterized by orthogonal matrices with determinant −1 (instead of +1). These combine proper rotations with reflections (which invert orientation). In other cases, where reflections are not being considered, the label proper may be dropped. This convention is followed in this article.
The set of all orthogonal matrices of size n with determinant +1 forms a group known as the special orthogonal group SO(n). The most important special case is that of the rotation group SO(3). The set of all orthogonal matrices of size n with determinant +1 or 1 forms the (general) orthogonal group O(n).
In two dimensions, every rotation matrix has the following form,
This rotates column vectors by means of the following matrix multiplication,
So the coordinates (x',y') of the point (x,y) after rotation are
The direction of vector rotation is counterclockwise if θ is positive (e.g. 90°), and clockwise if θ is negative (e.g. −90°). Thus the clockwise rotation matrix is found as
Note that the twodimensional case is the only nontrivial (i.e. not 1dimensional) case where the rotation matrices group is commutative, so that it does not matter in which order multiple rotations are performed. An alternative convention uses rotating axes,^{[1]} and the above matrix also represents a rotation of the axes clockwise through an angle θ.
If a standard righthanded Cartesian coordinate system is used, with the xaxis to the right and the yaxis up, the rotation R(θ) is counterclockwise. If a lefthanded Cartesian coordinate system is used, with x directed to the right but y directed down, R(θ) is clockwise. Such nonstandard orientations are rarely used in mathematics but are common in 2D computer graphics, which often have the origin in the top left corner and the yaxis down the screen or page.^{[2]}
See below for other alternative conventions which may change the sense of the rotation produced by a rotation matrix.
Particularly useful are the matrices for 90° and 180° rotations,
A basic rotation (also called elemental rotation) is a rotation about one of the axes of a Coordinate system. The following three basic rotation matrices rotate vectors by an angle θ about the x, y, or z axis, in three dimensions, using the right hand rule. (The same matrices can also represent a clockwise rotation of the axes^{[nb 1]})
For column vectors, each of these basic vector rotations appears counterclockwise when the axis about which they occur points toward the observer, the coordinate system is righthanded, and the angle θ is positive. R_{z}, for instance, would rotate toward the yaxis a vector aligned with the xaxis, as can easily be checked by operating with R_{z} on the vector (1,0,0):
This is similar to the rotation produced by the above mentioned 2D rotation matrix. See below for alternative conventions which may apparently or actually invert the sense of the rotation produced by these matrices.
Other rotation matrices can be obtained from these three using matrix multiplication. For example, the product
represents a rotation whose yaw, pitch, and roll angles are α, β and γ, respectively. More formally, it is an intrinsic rotation whose TaitBryan angles are α, β, γ, about axes z, y, x respectively. Similarly, the product
represents an extrinsic rotation whose Euler angles are α, β, γ about axes y, x, y.
These matrices produce the desired effect only if they are used to premultiply column vectors (see Ambiguities for more details).
It has been suggested that this section be merged into Rotation formalisms in three dimensions#Rotation matrix ↔ Euler axis/angle. (Discuss) Proposed since September 2013. 
Every rotation in three dimensions is defined by its axis — a direction that is left fixed by the rotation — and its angle — the amount of rotation about that axis (Euler rotation theorem).
There are several methods to compute an axis and an angle from a rotation matrix (see also axisangle). Here, we only describe the method based on the computation of the eigenvectors and eigenvalues of the rotation matrix. It is also possible to use the trace of the rotation matrix.
Given a 3 × 3 rotation matrix R, a vector u parallel to the rotation axis must satisfy
since the rotation of u around the rotation axis must result in u. The equation above may be solved for u which is unique up to a scalar factor unless R = I.
Further, the equation may be rewritten
which shows that u is the null space of R − I.
Viewed in another way, u is an eigenvector of R corresponding to the eigenvalue λ = 1. Every rotation matrix must have this eigenvalue, the other two eigenvalues being complex conjugates of each other. It follows that a general rotation matrix in three dimensions has, up to a multiplicative constant, only one real eigenvector.
To find the angle of a rotation, once the axis of the rotation is known, select a vector v perpendicular to the axis. Then the angle of the rotation is the angle between v and Rv. A much easier method, however, is to calculate the trace (i.e. the sum of the diagonal elements of the rotation matrix) which is 1 + 2cos θ. Care should be taken to select the right sign for the angle θ to match the chosen axis.
For some applications, it is helpful to be able to make a rotation with a given axis. Given a unit vector u = (u_{x}, u_{y}, u_{z}), where u_{x}^{2} + u_{y}^{2} + u_{z}^{2} = 1, the matrix for a rotation by an angle of θ about an axis in the direction of u is
This can be written more concisely as
where is the cross product matrix of u, is the tensor product and I is the Identity matrix. This is a matrix form of Rodrigues' rotation formula, with
If the 3D space is righthanded, this rotation will be counterclockwise when u points towards the observer (Righthand rule). Rotations in the counterclockwise (anticlockwise) direction are considered positive rotations.
In three dimensions, for any rotation matrix R_{a, θ} acting on ℝ^{3}, where a is a rotation axis and θ a rotation angle,
Some of these properties can be generalised to any number of dimensions. In other words, they hold for any rotation matrix R_{a, θ} ∈ ℝ^{n}.
For instance, in two dimensions the properties hold with the following exceptions:


In Euclidean geometry, a rotation is an example of an isometry, a transformation that moves points without changing the distances between them. Rotations are distinguished from other isometries by two additional properties: they leave (at least) one point fixed, and they leave "handedness" unchanged. By contrast, a translation moves every point, a reflection exchanges left and righthanded ordering, and a glide reflection does both.
A rotation that does not leave "handedness" unchanged is an improper rotation or a rotoinversion.
If a fixed point is taken as the origin of a Cartesian coordinate system, then every point can be given coordinates as a displacement from the origin. Thus one may work with the vector space of displacements instead of the points themselves. Now suppose (p_{1},…,p_{n}) are the coordinates of the vector p from the origin, O, to point P. Choose an orthonormal basis for our coordinates; then the squared distance to P, by Pythagoras, is
which can be computed using the matrix multiplication
A geometric rotation transforms lines to lines, and preserves ratios of distances between points. From these properties it can be shown that a rotation is a linear transformation of the vectors, and thus can be written in matrix form, Qp. The fact that a rotation preserves, not just ratios, but distances themselves, is stated as
or
Because this equation holds for all vectors, p, one concludes that every rotation matrix, Q, satisfies the orthogonality condition,
Rotations preserve handedness because they cannot change the ordering of the axes, which implies the special matrix condition,
Equally important, it can be shown that any matrix satisfying these two conditions acts as a rotation.
The inverse of a rotation matrix is its transpose, which is also a rotation matrix:
The product of two rotation matrices is a rotation matrix:
For n greater than 2, multiplication of n × n rotation matrices is not commutative.
Noting that any identity matrix is a rotation matrix, and that matrix multiplication is associative, we may summarize all these properties by saying that the n×n rotation matrices form a group, which for n > 2 is nonabelian, called a special orthogonal group, and denoted by SO(n), SO(n,R), SO_{n}, or SO_{n}(R), the group of n × n rotation matrices is isomorphic to the group of rotations in an ndimensional space. This means that multiplication of rotation matrices corresponds to composition of rotations, applied in lefttoright order of their corresponding matrices.
The interpretation of a rotation matrix can be subject to many ambiguities.
In most cases the effect of the ambiguity is equivalent to the effect of a rotation matrix inversion (for these orthogonal matrices equivalently matrix transpose).
Consider the 3×3 rotation matrix
If Q acts in a certain direction, v, purely as a scaling by a factor λ, then we have
so that
Thus λ is a root of the characteristic polynomial for Q,
Two features are noteworthy. First, one of the roots (or eigenvalues) is 1, which tells us that some direction is unaffected by the matrix. For rotations in three dimensions, this is the axis of the rotation (a concept that has no meaning in any other dimension). Second, the other two roots are a pair of complex conjugates, whose product is 1 (the constant term of the quadratic), and whose sum is 2 cos θ (the negated linear term). This factorization is of interest for 3×3 rotation matrices because the same thing occurs for all of them. (As special cases, for a null rotation the "complex conjugates" are both 1, and for a 180° rotation they are both −1.) Furthermore, a similar factorization holds for any n×n rotation matrix. If the dimension, n, is odd, there will be a "dangling" eigenvalue of 1; and for any dimension the rest of the polynomial factors into quadratic terms like the one here (with the two special cases noted). We are guaranteed that the characteristic polynomial will have degree n and thus n eigenvalues. And since a rotation matrix commutes with its transpose, it is a normal matrix, so can be diagonalized. We conclude that every rotation matrix, when expressed in a suitable coordinate system, partitions into independent rotations of twodimensional subspaces, at most ^{n}⁄_{2} of them.
The sum of the entries on the main diagonal of a matrix is called the trace; it does not change if we reorient the coordinate system, and always equals the sum of the eigenvalues. This has the convenient implication for 2×2 and 3×3 rotation matrices that the trace reveals the angle of rotation, θ, in the twodimensional (sub)space. For a 2×2 matrix the trace is 2 cos(θ), and for a 3×3 matrix it is 1+2 cos(θ). In the threedimensional case, the subspace consists of all vectors perpendicular to the rotation axis (the invariant direction, with eigenvalue 1). Thus we can extract from any 3×3 rotation matrix a rotation axis and an angle, and these completely determine the rotation.
The constraints on a 2×2 rotation matrix imply that it must have the form
with a^{2}+b^{2} = 1. Therefore we may set a = cos θ and b = sin θ, for some angle θ. To solve for θ it is not enough to look at a alone or b alone; we must consider both together to place the angle in the correct quadrant, using a twoargument arctangent function.
Now consider the first column of a 3×3 rotation matrix,
Although a^{2}+b^{2} will probably not equal 1, but some value r^{2} < 1, we can use a slight variation of the previous computation to find a socalled Givens rotation that transforms the column to
zeroing b. This acts on the subspace spanned by the x and y axes. We can then repeat the process for the xz subspace to zero c. Acting on the full matrix, these two rotations produce the schematic form
Shifting attention to the second column, a Givens rotation of the yz subspace can now zero the z value. This brings the full matrix to the form
which is an identity matrix. Thus we have decomposed Q as
An n×n rotation matrix will have (n−1)+(n−2)+⋯+2+1, or
entries below the diagonal to zero. We can zero them by extending the same idea of stepping through the columns with a series of rotations in a fixed sequence of planes. We conclude that the set of n×n rotation matrices, each of which has n^{2} entries, can be parameterized by n(n−1)/2 angles.
xzx_{w}  xzy_{w}  xyx_{w}  xyz_{w} 
yxy_{w}  yxz_{w}  yzy_{w}  yzx_{w} 
zyz_{w}  zyx_{w}  zxz_{w}  zxy_{w} 
xzx_{b}  yzx_{b}  xyx_{b}  zyx_{b} 
yxy_{b}  zxy_{b}  yzy_{b}  xzy_{b} 
zyz_{b}  xyz_{b}  zxz_{b}  yxz_{b} 
In three dimensions this restates in matrix form an observation made by Euler, so mathematicians call the ordered sequence of three angles Euler angles. However, the situation is somewhat more complicated than we have so far indicated. Despite the small dimension, we actually have considerable freedom in the sequence of axis pairs we use; and we also have some freedom in the choice of angles. Thus we find many different conventions employed when threedimensional rotations are parameterized for physics, or medicine, or chemistry, or other disciplines. When we include the option of world axes or body axes, 24 different sequences are possible. And while some disciplines call any sequence Euler angles, others give different names (Euler, Cardano, TaitBryan, Rollpitchyaw) to different sequences.
One reason for the large number of options is that, as noted previously, rotations in three dimensions (and higher) do not commute. If we reverse a given sequence of rotations, we get a different outcome. This also implies that we cannot compose two rotations by adding their corresponding angles. Thus Euler angles are not vectors, despite a similarity in appearance as a triple of numbers.
A 3×3 rotation matrix like
suggests a 2×2 rotation matrix,
is embedded in the upper left corner:
This is no illusion; not just one, but many, copies of ndimensional rotations are found within (n+1)dimensional rotations, as subgroups. Each embedding leaves one direction fixed, which in the case of 3×3 matrices is the rotation axis. For example, we have
fixing the x axis, the y axis, and the z axis, respectively. The rotation axis need not be a coordinate axis; if u = (x,y,z) is a unit vector in the desired direction, then
where c_{θ} = cos θ, s_{θ} = sin θ, is a rotation by angle θ leaving axis u fixed.
A direction in (n+1)dimensional space will be a unit magnitude vector, which we may consider a point on a generalized sphere, S^{n}. Thus it is natural to describe the rotation group SO(n+1) as combining SO(n) and S^{n}. A suitable formalism is the fiber bundle,
where for every direction in the "base space", S^{n}, the "fiber" over it in the "total space", SO(n+1), is a copy of the "fiber space", SO(n), namely the rotations that keep that direction fixed.
Thus we can build an n×n rotation matrix by starting with a 2×2 matrix, aiming its fixed axis on S^{2} (the ordinary sphere in threedimensional space), aiming the resulting rotation on S^{3}, and so on up through S^{n−1}. A point on S^{n} can be selected using n numbers, so we again have n(n−1)/2 numbers to describe any n×n rotation matrix.
In fact, we can view the sequential angle decomposition, discussed previously, as reversing this process. The composition of n−1 Givens rotations brings the first column (and row) to (1,0,…,0), so that the remainder of the matrix is a rotation matrix of dimension one less, embedded so as to leave (1,0,…,0) fixed.
When an n×n rotation matrix Q, does not include a −1 eigenvalue, thus none of the planar rotations which it comprises are 180° rotations, then Q+I is an invertible matrix. Most rotation matrices fit this description, and for them it can be shown that (Q−I)(Q+I)^{−1} is a skewsymmetric matrix, A. Thus A^{T} = −A; and since the diagonal is necessarily zero, and since the upper triangle determines the lower one, A contains n(n−1)/2 independent numbers.
Conveniently, I−A is invertible whenever A is skewsymmetric; thus we can recover the original matrix using the Cayley transform,
which maps any skewsymmetric matrix A to a rotation matrix. In fact, aside from the noted exceptions, we can produce any rotation matrix in this way. Although in practical applications we can hardly afford to ignore 180° rotations, the Cayley transform is still a potentially useful tool, giving a parameterization of most rotation matrices without trigonometric functions.
In three dimensions, for example, we have (Cayley 1846)
If we condense the skew entries into a vector, (x,y,z), then we produce a 90° rotation around the x axis for (1,0,0), around the y axis for (0,1,0), and around the z axis for (0,0,1). The 180° rotations are just out of reach; for, in the limit as x goes to infinity, (x,0,0) does approach a 180° rotation around the x axis, and similarly for other directions.
For the 2D case, a rotation matrix can be decomposed into three shear matrices (Paeth 1986):
This is useful, for instance, in computer graphics, since shears can be implemented with fewer multiplication instructions than rotating a bitmap directly. On modern computers, this may not matter, but it can be relevant for very old or lowend microprocessors.
The n × n rotation matrices for each n form a group, the special orthogonal group, SO(n). This algebraic structure is coupled with a the topological structure inherited from GL_{n}(ℝ) in such a way that the operations of multiplication and taking the inverse are analytic functions of the matrix entries. Thus SO(n) is for each n a Lie group. It is compact and connected, but not simply connected. It is also semisimple group, in fact simple group with the exception SO(4).^{[4]} The relevance of this is that all theorems and all machinery from the theory of analytic manifolds (analytic manifolds are in particular smooth manifolds) apply and the welldeveloped representation theory of compact semisimple groups is ready for use.
The Lie algebra so(n) of SO(n) is given by
and is the space of skewsymmetric matrices of dimension n, see classical group, where o(n) is the Lie algebra of O(n), the orthogonal group. For reference, the most common basis for so(3) is
More details about the 3dimensional case can be found in Lie algebra SO(3).
Connecting the Lie algebra to the Lie group is the exponential map, which is defined using the standard matrix exponential series for e^{A}^{[5]} For any skewsymmetric matrix A, exp(A) is always a rotation matrix.^{[nb 2]}
An important practical example is the 3 × 3 case. In rotation group SO(3), it is shown that one can identify every A ∈ so(3) with a vector ω = θ u, where u = (x,y,z) is a unit magnitude vector. By the properties of the identification su(2) ≅ ℝ^{3}, u is in the null space of A. Thus, u is left invariant by exp(A) and is hence a rotation axis.
Using Rodrigues' rotation formula on matrix form with θ = ^{θ}⁄_{2} + ^{θ}⁄_{2}, together with standard double angle formulae one obtains,
where c = cos ^{θ}⁄_{2}, s = sin ^{θ}⁄_{2}.
This is the matrix for a rotation around axis u by the angle θ in halfangle form. For full detail, see exponential map SO(3).
The BCH formula provides an explicit expression for Z = log(e^{X}e^{Y}) in terms of a series expansion of nested commutators of X and Y.^{[6]} This general expansion unfolds as^{[nb 3]}
In the 3 × 3 case, the general infinite expansion has a compact form,^{[7]}
for suitable trigonometric function coefficients, detailed in the Baker–Campbell–Hausdorff formula for SO(3).
As a group identity, the above holds for all faithful representations, including the doublet (spinor representation), which is simpler. The same explicit formula thus follows straightforwardly through Pauli matrices; see the 2×2 derivation for SU(2). For the general n×n case, one might use Ref.^{[8]}
The Lie group of n×n rotation matrices, SO(n), is not simply connected, so Lie theory tells us it is a homomorphic image of a universal covering group. Often the covering group, which in this case is called the spin group denoted by Spin(n), is simpler and more natural to work with.^{[9]}
In the case of planar rotations, SO(2) is topologically a circle, S^{1}. Its universal covering group, Spin(2), is isomorphic to the real line, R, under addition. Whenever angles of arbitrary magnitude are used one is taking advantage of the convenience of the universal cover. Every 2 × 2 rotation matrix is produced by a countable infinity of angles, separated by integer multiples of 2π. Correspondingly, the fundamental group of SO(2) is isomorphic to the integers, Z.
In the case of spatial rotations, SO(3) is topologically equivalent to threedimensional real projective space, RP^{3}. Its universal covering group, Spin(3), is isomorphic to the 3sphere, S^{3}. Every 3 × 3 rotation matrix is produced by two opposite points on the sphere. Correspondingly, the fundamental group of SO(3) is isomorphic to the twoelement group, Z_{2}.
We can also describe Spin(3) as isomorphic to quaternions of unit norm under multiplication, or to certain 4 × 4 real matrices, or to 2 × 2 complex special unitary matrices, namely SU(2). The covering maps for the first and the last case are given by
and
For a detailed account of the SU(2)covering and the quaternionic covering, see spin group SO(3).
Many features of these cases are the same for higher dimensions. The coverings are all twotoone, with SO(n), n > 2, having fundamental group Z_{2}. The natural setting for these groups is within a Clifford algebra. One type of action of the rotations is produced by a kind of "sandwich", denoted by qvq^{∗}. More importantly in applications to physics, the corresponding spin representation of the Lie algebra sits inside the Clifford algebra. It can be exponentiated in the usual way to give rise to a 2valued representation, a k a projective representation of the rotation group. This is the case with SO(3) and SU(2), where the 2valued representation can be viewed as an "inverse" of the covering map. By properties of covering maps, the inverse can be chosen onotoone as a local section, but not globally.
The matrices in the Lie algebra are not themselves rotations; the skewsymmetric matrices are derivatives, proportional differences of rotations. An actual "differential rotation", or infinitesimal rotation matrix has the form
where dθ is vanishingly small and A ∈ SO(n), for instance with A = L_{x},
The computation rules are as usual except that infinitesimals of second order are routinely dropped. With these rules, these matrices do not satisfy all the same properties as ordinary finite rotation matrices under the usual treatment of infinitesimals.^{[10]} It turns out that the order in which infinitesimal rotations are applied is irrelevant. To see this exemplified, consult infinitesimal rotations SO(3).
We have seen the existence of several decompositions that apply in any dimension, namely independent planes, sequential angles, and nested dimensions. In all these cases we can either decompose a matrix or construct one. We have also given special attention to 3×3 rotation matrices, and these warrant further attention, in both directions (Stuelpnagel 1964).
Given the unit quaternion q = (w,x,y,z), the equivalent lefthanded (PostMultiplied) 3×3 rotation matrix is
Now every quaternion component appears multiplied by two in a term of degree two, and if all such terms are zero what's left is an identity matrix. This leads to an efficient, robust conversion from any quaternion – whether unit or nonunit – to a 3×3 rotation matrix.
n = w * w + x * x + y * y + z * z s = if n == 0 then 0 else 2 / n wx = s * w * x, wy = s * w * y, wz = s * w * z xx = s * x * x, xy = s * x * y, xz = s * x * z yy = s * y * y, yz = s * y * z, zz = s * z * z [ 1  (yy + zz) xy  wz xz + wy ] [ xy + wz 1  (xx + zz) yz  wx ] [ xz  wy yz + wx 1  (xx + yy) ]
Freed from the demand for a unit quaternion, we find that nonzero quaternions act as homogeneous coordinates for 3×3 rotation matrices. The Cayley transform, discussed earlier, is obtained by scaling the quaternion so that its w component is 1. For a 180° rotation around any axis, w will be zero, which explains the Cayley limitation.
The sum of the entries along the main diagonal (the trace), plus one, equals 4−4(x^{2}+y^{2}+z^{2}), which is 4w^{2}. Thus we can write the trace itself as 2w^{2}+2w^{2}−1; and from the previous version of the matrix we see that the diagonal entries themselves have the same form: 2x^{2}+2w^{2}−1, 2y^{2}+2w^{2}−1, and 2z^{2}+2w^{2}−1. So we can easily compare the magnitudes of all four quaternion components using the matrix diagonal. We can, in fact, obtain all four magnitudes using sums and square roots, and choose consistent signs using the skewsymmetric part of the offdiagonal entries.
t = Q_{xx}+Q_{yy}+Q_{zz} (trace of Q) r = sqrt(1+t) w = 0.5*r x = copysign(0.5*sqrt(1+Q_{xx}Q_{yy}Q_{zz}), Q_{zy}Q_{yz}) y = copysign(0.5*sqrt(1Q_{xx}+Q_{yy}Q_{zz}), Q_{xz}Q_{zx}) z = copysign(0.5*sqrt(1Q_{xx}Q_{yy}+Q_{zz}), Q_{yx}Q_{xy})
where copysign(x,y) is x with the sign of y:
Alternatively, use a single square root and division
t = Q_{xx}+Q_{yy}+Q_{zz} r = sqrt(1+t) s = 0.5/r w = 0.5*r x = (Q_{zy}Q_{yz})*s y = (Q_{xz}Q_{zx})*s z = (Q_{yx}Q_{xy})*s
This is numerically stable so long as the trace, t, is not negative; otherwise, we risk dividing by (nearly) zero. In that case, suppose Q_{xx} is the largest diagonal entry, so x will have the largest magnitude (the other cases are similar); then the following is safe.
t = Q_{xx}+Q_{yy}+Q_{zz} r = sqrt(1+Q_{xx}Q_{yy}Q_{zz}) s = 0.5/r w = (Q_{zy}Q_{yz})*s x = 0.5*r y = (Q_{xy}+Q_{yx})*s z = (Q_{zx}+Q_{xz})*s
If the matrix contains significant error, such as accumulated numerical error, we may construct a symmetric 4×4 matrix,
and find the eigenvector, (x,y,z,w), of its largest magnitude eigenvalue. (If Q is truly a rotation matrix, that value will be 1.) The quaternion so obtained will correspond to the rotation matrix closest to the given matrix(BarItzhack 2000).
If the n×n matrix M is nonsingular, its columns are linearly independent vectors; thus the Gram–Schmidt process can adjust them to be an orthonormal basis. Stated in terms of numerical linear algebra, we convert M to an orthogonal matrix, Q, using QR decomposition. However, we often prefer a Q "closest" to M, which this method does not accomplish. For that, the tool we want is the polar decomposition (Fan & Hoffman 1955; Higham 1989).
To measure closeness, we may use any matrix norm invariant under orthogonal transformations. A convenient choice is the Frobenius norm, Q−M_{F}, squared, which is the sum of the squares of the element differences. Writing this in terms of the trace, Tr, our goal is,
Though written in matrix terms, the objective function is just a quadratic polynomial. We can minimize it in the usual way, by finding where its derivative is zero. For a 3×3 matrix, the orthogonality constraint implies six scalar equalities that the entries of Q must satisfy. To incorporate the constraint(s), we may employ a standard technique, Lagrange multipliers, assembled as a symmetric matrix, Y. Thus our method is:
Consider a 2×2 example. Including constraints, we seek to minimize
Taking the derivative with respect to Q_{xx}, Q_{xy}, Q_{yx}, Q_{yy} in turn, we assemble a matrix.
In general, we obtain the equation
so that
where Q is orthogonal and S is symmetric. To ensure a minimum, the Y matrix (and hence S) must be positive definite. Linear algebra calls QS the polar decomposition of M, with S the positive square root of S^{2} = M^{T}M.
When M is nonsingular, the Q and S factors of the polar decomposition are uniquely determined. However, the determinant of S is positive because S is positive definite, so Q inherits the sign of the determinant of M. That is, Q is only guaranteed to be orthogonal, not a rotation matrix. This is unavoidable; an M with negative determinant has no uniquely defined closest rotation matrix.
To efficiently construct a rotation matrix Q from an angle θ and a unit axis u, we can take advantage of symmetry and skewsymmetry within the entries. If x, y, and z are the components of the unit vector representing the axis, and
then
Determining an axis and angle, like determining a quaternion, is only possible up to sign; that is, (u,θ) and (−u,−θ) correspond to the same rotation matrix, just like q and −q. As well, axisangle extraction presents additional difficulties. The angle can be restricted to be from 0° to 180°, but angles are formally ambiguous by multiples of 360°. When the angle is zero, the axis is undefined. When the angle is 180°, the matrix becomes symmetric, which has implications in extracting the axis. Near multiples of 180°, care is needed to avoid numerical problems: in extracting the angle, a twoargument arctangent with atan2(sin θ,cos θ) equal to θ avoids the insensitivity of arccosine; and in computing the axis magnitude in order to force unit magnitude, a bruteforce approach can lose accuracy through underflow (Moler & Morrison 1983).
A partial approach is as follows:
The x, y, and z components of the axis would then be divided by r. A fully robust approach will use different code when t, the trace of the matrix Q, is negative, as with quaternion extraction. When r is zero because the angle is zero, an axis must be provided from some source other than the matrix.
Complexity of conversion escalates with Euler angles (used here in the broad sense). The first difficulty is to establish which of the twentyfour variations of Cartesian axis order we will use. Suppose the three angles are θ_{1}, θ_{2}, θ_{3}; physics and chemistry may interpret these as
while aircraft dynamics may use
One systematic approach begins with choosing the rightmost axis. Among all permutations of (x,y,z), only two place that axis first; one is an even permutation and the other odd. Choosing parity thus establishes the middle axis. That leaves two choices for the leftmost axis, either duplicating the first or not. These three choices gives us 3×2×2 = 12 variations; we double that to 24 by choosing static or rotating axes.
This is enough to construct a matrix from angles, but triples differing in many ways can give the same rotation matrix. For example, suppose we use the zyz convention above; then we have the following equivalent pairs:
(90°,  45°,  −105°)  ≡  (−270°,  −315°,  255°)  multiples of 360° 
(72°,  0°,  0°)  ≡  (40°,  0°,  32°)  singular alignment 
(45°,  60°,  −30°)  ≡  (−135°,  −60°,  150°)  bistable flip 
Angles for any order can be found using a concise common routine (Herter & Lott 1993; Shoemake 1994).
The problem of singular alignment, the mathematical analog of physical gimbal lock, occurs when the middle rotation aligns the axes of the first and last rotations. It afflicts every axis order at either even or odd multiples of 90°. These singularities are not characteristic of the rotation matrix as such, and only occur with the usage of Euler angles.
The singularities are avoided when considering and manipulating the rotation matrix as orthonormal row vectors (in 3D applications often named 'right'vector, 'up'vector and 'out'vector) instead of as angles. The singularities are also avoided when working with quaternions.
We sometimes need to generate a uniformly distributed random rotation matrix. It seems intuitively clear in two dimensions that this means the rotation angle is uniformly distributed between 0 and 2π. That intuition is correct, but does not carry over to higher dimensions. For example, if we decompose 3×3 rotation matrices in axisangle form, the angle should not be uniformly distributed; the probability that (the magnitude of) the angle is at most θ should be ^{1}⁄_{π}(θ − sin θ), for 0 ≤ θ ≤ π.
Since SO(n) is a connected and locally compact Lie group, we have a simple standard criterion for uniformity, namely that the distribution be unchanged when composed with any arbitrary rotation (a Lie group "translation"). This definition corresponds to what is called Haar measure. León, Massé & Rivest (2006) show how to use the Cayley transform to generate and test matrices according to this criterion.
We can also generate a uniform distribution in any dimension using the subgroup algorithm of Diaconis & Shashahani (1987). This recursively exploits the nested dimensions group structure of SO(n), as follows. Generate a uniform angle and construct a 2×2 rotation matrix. To step from n to n+1, generate a vector v uniformly distributed on the nsphere, S^{n}, embed the n×n matrix in the next larger size with last column (0,…,0,1), and rotate the larger matrix so the last column becomes v.
As usual, we have special alternatives for the 3×3 case. Each of these methods begins with three independent random scalars uniformly distributed on the unit interval. Arvo (1992) takes advantage of the odd dimension to change a Householder reflection to a rotation by negation, and uses that to aim the axis of a uniform planar rotation.
Another method uses unit quaternions. Multiplication of rotation matrices is homomorphic to multiplication of quaternions, and multiplication by a unit quaternion rotates the unit sphere. Since the homomorphism is a local isometry, we immediately conclude that to produce a uniform distribution on SO(3) we may use a uniform distribution on S^{3}.
Euler angles can also be used, though not with each angle uniformly distributed (Murnaghan 1962; Miles 1965).
For the axisangle form, the axis is uniformly distributed over the unit sphere of directions, S^{2}, while the angle has the nonuniform distribution over [0,π] noted previously (Miles 1965).