Our portable devices are getting more and more fun to use, due in part to new generations of augmented and virtual reality applications. If you look at the software source code at the heart of these AR & VR apps, you’ll discover a common component: a mathematical model relating the position and orientation of your portable device within an earth frame of reference. I first touched on this back in my post Degrees of freedom vs. axes.Now I want to dig into some of the ways to mathematically model orientation. Perhaps the three most common are Euler angles, rotation matrices and quaternions. Today’s discussion will focus on the Euler angles and rotation matrices. We’ll follow up with quaternions in a future posting.
Figure 1: Local earth versus the body frameThe figure above is a variant of a figure that first showed up in
Accelerometer placement — where and why.Let’s arbitrarily choose the phone screen X,Y coordinate system as our rotating frame of reference for this discussion. You can intuitively see that any X,Y point (Z assumed zero) on the phone screen will map to some X, Y, Z point in the earth frame of reference. It is also clear that the Cartesian axes in the phone (or body) frame of reference will only rarely align themselves with the local earth frame axes. Since the position offset, R, doesn’t affect orientation, we can collapse the figure down to:
Figure 2: Using a common origin for both earth and body framesNow let’s remove the phone from the picture and focus just on points in the XY plane. The figure below shows the earth frame rotated into the body frame by an angle Psi (ψ).
Figure 3: The XY plane illustrates rotation from earth into body frame about the Z axisYou probably first saw a figure like this in your high school geometry or trig course. It allows us to map any point “A” in any standard X,Y Cartesian system to any other X,Y Cartesian system, which is rotated from it by some angle Psi (ψ), with a simple linear transformation. To see how, let’s deconstruct that figure using a number of right triangles.
Figure 4: Physical justification for terms in the rotation matrixIf you study Figure 4, you can see that the rotation angle, ψ, is present in each of the 4 right triangles we added. Additionally, the hypotenuse of each triangle is either x
_{b} or y
_{b}. Given that information, we can see how to compute x
_{e} and y
_{e} from x
_{b} and y
_{b}:
x_{e} = x_{b} cos(Y) – y_{b} sin(Y) 
(Eqn. 1) 
y_{e} = x_{b} sin(Y) + y_{b} cos(Y) 
(Eqn. 2) 
In matrix form: 

A_{earth} = C(ψ) A_{body} 
(Eqn. 3) 
The inverse of which is: 

A_{body} = C(ψ) A_{earth} 
(Eqn. 4) 
where A_{earth} and A_{body} are of the form [x y]^{T} and:

(Eqn. 5) 

(Eqn. 6) 
All other relationships included in this discussion can be similarly mapped to a diagram of the rotation. The analysis also extends naturally to three dimensions. If A_{earth} and A_{body} are of the form [x y z]^{T}, then:

(Eqn. 7) 

(Eqn. 8) 
We will use the three dimensional form in the remainder of this discussion. In both two and three dimensional cases, C(ψ) and C(ψ) are known as rotation matrices.
Notice that C(ψ) is the transpose of C(ψ), and viceversa: C(ψ)^{T} = C(ψ). This is a special property of all rotation matrices. You can reverse the sense of rotation simply by taking the transpose of the original matrix.
C(ψ) C(ψ) = I_{3×3} 
(Eqn. 9) 
Where I_{3×3} is simply the identity matrix:

(Eqn. 10) 
This also implies that the inverse of a rotation matrix is simply its own transpose:
C(ψ)^{1} = C(ψ)^{T} 
(Eqn. 11) 
Similar relationships hold for rotations in the XZ (about the Y axis) plane:
Figure 5: The XZ plane illustrates rotation about the Y axis
x_{e} = x_{b} cos(θ) + z_{b} sin(θ) 
(Eqn. 12) 
z_{e} = – x_{b} sin(θ) + z_{b} cos(θ) 
(Eqn. 13) 
A_{earth} = C(θ) A_{body} 
(Eqn. 14) 
A_{body} = C(θ) A_{earth} 
(Eqn. 15) 

(Eqn. 16) 

(Eqn. 17) 
and for rotations in the ZY (about the X axis) plane:
Figure 6: The YZ plane illustrates rotation about the X axis
y_{e} = y_{b} cos(Φ) – z_{b} sin(Φ) 
(Eqn. 18) 
z_{e} = y_{b} sin(Φ) + z_{b} cos(Φ) 
(Eqn. 19) 
A_{earth} = C(Φ) A_{body} 
(Eqn. 20) 
A_{body} = C(Φ) A_{earth} 
(Eqn. 21) 

(Eqn. 22) 

(Eqn. 23) 
Phi, Theta and Psi (Φ, θ and ψ) rotations in sequence can map a point in any righthandrule (RHR) 3dimensional space into any other RHR 3dimensional space.
A rotation from earth by body frame about Z, then Y then X axes (the “aerospace” sequence) is represented by:

(Eqn. 24) 
The composite rotation matrix is computed simply by multiplying the three individual matrices in the specified order. Consistent with the discussion above, the inverse of this expression is:

(Eqn. 25) 
Collectively, Φ, θ and ψ are known as Euler angles. You may also see Φ, θ and ψ referred to as “roll”, “pitch” and “yaw” respectively. The subscript “RPY” in the expression above refers to rollpitchyaw, and “YPR” refers to yawpitchroll.
Euler angles are sometimes subdivided into “TaitBryan” angles (in which rotations occur about all three axes) and “Proper” Euler angles (in which the first and third axes of rotation are the same). Regardless of which type you use, it is important to specify the order of the rotations — which IS significant. In the table below, the rightmost rotation is performed first, consistent with the matrix operations that will be required to implement the rotation. Possible variants are:
Alpha 
Angles 
Comments 
YRP 
ψΦθ 
TaitBryan angles
(AKA Nautical or Cardan angles) 
All of these are sometimes referred to simply as “Euler Angles” 
YPR 
ψθΦ 
PYR 
θψΦ 
PRY 
θΦψ 
RYP 
Φψθ 
RPY 
Φθψ 
RYR 
ΦψΦ 
Proper Euler Angles 
RPR 
ΦθΦ 
PYP 
θψθ 
PRP 
θΦθ 
YRY 
ψΦψ 
YPY 
ψθψ 
A full discussion of Euler angles is beyond the scope of this article. But some key points you need to take away are:
 Again, order of rotation matters!
 There almost as many notations for Euler angles as the references in which they appear. Be specific in your notation.
 There may be multiple Euler angle combinations which map to the same physical rotation. They are not unique.
 There are typically limits on the range of Euler rotation for each axis (+/ π or +/ π/2). These affect how the total rotation is spread across the three angles. They also tend to introduce discontinuities when Euler angles are computed over time.
 Each Euler triad will map to 3×3 rotation matrix (which IS unique) in a manner similar to that shown in Equations 24 and 25 above.
If you define a “reference orientation” for any object, then you can define its current orientation as some rotation relative to that reference. Tracking orientation over time is then equivalent to tracking rotation from that reference over time. Because Euler angles are relatively easy to visualize, they enjoyed early popularity in a number of fields. But because of the shortcomings listed above, anyone who has used them extensively invariably learns to despise them — I know I do!
Rotation matrices don’t require a master’s degree to be able to use them. Anyone with a college freshman geometry class under their belt can figure them out. They don’t have the ambiguities associated with Euler angles, and can be found at the heart of many algorithms.