<?xml version="1.0" encoding="UTF-8"?>

<record version="2" id="1123">
 <title>Euler angles: intrinsic and extrinsic rotations</title>
 <name>EulerAnglesIntrinsicAndExtrinsicRotations</name>
 <created>2026-08-28 22:45:49</created>
 <modified>2026-08-29 20:17:36</modified>
 <type>Definition</type>
 <creator id="1" name="bloftin"/>
 <modifier id="1" name="bloftin"/>
 <author id="1" name="bloftin"/>
 <classification>
	<category scheme="pacs" code="02.40.Yy"/>
	<category scheme="pacs" code="45.40.-f"/>
	<category scheme="pacs" code="02.10.Ud"/>
 </classification>
 <keywords>
	<term>Euler angles</term>
	<term>intrinsic rotations</term>
	<term>extrinsic rotations</term>
	<term>body fixed rotations</term>
	<term>space fixed rotations</term>
	<term>moving axes</term>
	<term>fixed axes</term>
	<term>passive coordinate transformation</term>
 </keywords>
 <preamble>% this is the default PhysicsLibrary preamble.  as your knowledge
% of TeX increases, you will probably want to edit this, but
% it should be fine as is for beginners.

% almost certainly you want these
\usepackage{amssymb}
\usepackage{amsmath}
\usepackage{amsfonts}

% used for TeXing text within eps files
%\usepackage{psfrag}
% need this for including graphics (\includegraphics).
% If you use \includegraphics{figure} with no file extension, PhysicsLibrary
% will prefer figure.png before falling back to figure.eps.
\usepackage{graphicx}
\DeclareGraphicsExtensions{.png,.jpg,.jpeg,.pdf,.eps}
% for neatly defining theorems and propositions
%\usepackage{amsthm}
% making logically defined graphics
%\usepackage{xypic}

% there are many more packages, add them here as you need them

% define commands here</preamble>
 <content>\section*{Euler Angles: Intrinsic and Extrinsic Rotations}

Euler angle descriptions are frequently labeled \emph{intrinsic} or
\emph{extrinsic}.

Those words answer a specific geometric question:

\begin{quote}
Which axes are used for the second and third rotations?
\end{quote}

In an intrinsic sequence, each new rotation is taken about an axis of the
current intermediate frame.  The axes move with the frame.

In an extrinsic sequence, each rotation is taken about an axis fixed in the
original reference frame.

This distinction is independent of the active versus passive distinction.
PhysicsLibrary uses passive coordinate maps as its house convention, but both
intrinsic and extrinsic axis constructions can be described passively.

The objective of this article is to make those statements geometric, derive
their matrix consequences, and establish the reverse-order equivalence between
the two descriptions.

\section{Convention recap}

Let frames $A$ and $B$ be right handed and orthonormal.

PhysicsLibrary writes the passive coordinate map as

\begin{equation}
{}^B\mathbf v
=
{}^BC_A\,{}^A\mathbf v.
\end{equation}

The elementary passive frame rotations are

\begin{equation}
C_1(\lambda)
=
\begin{bmatrix}
1&amp;0&amp;0\\
0&amp;\cos\lambda&amp;\sin\lambda\\
0&amp;-\sin\lambda&amp;\cos\lambda
\end{bmatrix},
\end{equation}

\begin{equation}
C_2(\lambda)
=
\begin{bmatrix}
\cos\lambda&amp;0&amp;-\sin\lambda\\
0&amp;1&amp;0\\
\sin\lambda&amp;0&amp;\cos\lambda
\end{bmatrix},
\end{equation}

and

\begin{equation}
C_3(\lambda)
=
\begin{bmatrix}
\cos\lambda&amp;\sin\lambda&amp;0\\
-\sin\lambda&amp;\cos\lambda&amp;0\\
0&amp;0&amp;1
\end{bmatrix}.
\end{equation}

The corresponding active rotation matrices are

\begin{equation}
R_i(\lambda)
=
C_i(\lambda)^T
=
C_i(-\lambda).
\end{equation}

The $R_i$ notation will be useful when describing how frame basis vectors move
in the fixed reference frame.

\section{Why the pictures must show intermediate frames}

A single diagram containing only the initial and final frames cannot reveal
whether a three angle construction was intrinsic or extrinsic.

The difference appears at the second rotation.

After the first rotation, an intrinsic construction uses an axis belonging to
the newly rotated frame.

An extrinsic construction continues to use an axis belonging to the original
frame.

For this reason the figures in this article show intermediate frames
explicitly rather than attempting to compress the entire sequence into one
dense axis drawing.

This is also the organization used by modern multibody dynamics software and
reference frame treatments: body fixed rotations are constructed through new
intermediate axes, while space fixed rotations continue to use the parent
frame axes.

\section{Intrinsic rotations: the axes move with the frame}

Consider an intrinsic $3$-$2$-$1$ construction.

Let

\[
A_0=A.
\]

The first frame rotation is through $\alpha$ about axis $3$ of frame $A$.
Call the new frame $A_1$.

The second rotation is through $\beta$, but now the rotation axis is axis $2$
of frame $A_1$, not axis $2$ of the original frame.

\begin{center}
\includegraphics[width=0.88\textwidth]{Intrinsic_moving_axis_rotations.png}

\vspace{0.45em}

\textbf{Figure.}
Intrinsic construction through the first two rotations of a $3$-$2$-$1$
sequence.  After the first rotation, the second rotation is about the moved
axis $y_1$.  The original $y_A$ axis is retained as a reference so the
difference is visible.
\end{center}

The full intrinsic frame chain is

\[
A_0
\longrightarrow
A_1
\longrightarrow
A_2
\longrightarrow
A_3=B.
\]

For a generic intrinsic $i$-$j$-$k$ sequence, the first rotation is about axis
$i$ of $A_0$, the second about axis $j$ of $A_1$, and the third about axis
$k$ of $A_2$.

The corresponding passive coordinate transformations are

\begin{equation}
{}^{A_1}\mathbf v
=
C_i(\alpha)\,{}^A\mathbf v,
\end{equation}

\begin{equation}
{}^{A_2}\mathbf v
=
C_j(\beta)\,{}^{A_1}\mathbf v,
\end{equation}

and

\begin{equation}
{}^B\mathbf v
=
C_k(\gamma)\,{}^{A_2}\mathbf v.
\end{equation}

Substitution gives the PhysicsLibrary intrinsic sequence rule

\begin{equation}
{}^BC_A
=
C_k(\gamma)
C_j(\beta)
C_i(\alpha).
\end{equation}

The rightmost matrix acts first on a coordinate column.

\section{Extrinsic rotations: the axes stay fixed}

Now consider an extrinsic construction.

The first frame rotation is again about an axis of the original reference
frame.  After that rotation, however, the second and third rotation axes remain
axes of the original frame $A$.

For an extrinsic $3$-$2$-$1$ example, the second rotation is about the original
axis $2_A$, even though the body frame has already moved.

\begin{center}
\includegraphics[width=0.88\textwidth]{EA03_extrinsic_fixed_axis_second_rotation.png}

\vspace{0.45em}

\textbf{Figure.}
Extrinsic construction through the first two rotations of a $3$-$2$-$1$
sequence.  The second rotation is about the fixed original axis $y_A$.
The intermediate frame has moved, but the axis used to define the second
rotation has not.
\end{center}

It is helpful to derive the extrinsic passive DCM through the orientation of
the moving frame basis expressed in the fixed frame.

Let

\[
R_i(\lambda)=C_i(\lambda)^T
\]

denote the active matrix that rotates frame basis vectors through the positive
geometric angle $\lambda$ about fixed axis $i$.

For an extrinsic $i$-$j$-$k$ frame sequence,

\begin{equation}
{}^AE_B
=
R_k(\gamma)
R_j(\beta)
R_i(\alpha),
\end{equation}

where the columns of ${}^AE_B$ are the final frame $B$ basis vectors expressed
in frame $A$.

The passive coordinate map is the transpose:

\begin{equation}
{}^BC_A
=
({}^AE_B)^T.
\end{equation}

Therefore

\begin{equation}
{}^BC_A
=
C_i(\alpha)
C_j(\beta)
C_k(\gamma).
\end{equation}

This is the generic PhysicsLibrary passive formula for an extrinsic
$i$-$j$-$k$ sequence.

\section{Intrinsic and extrinsic sequences with the same axis labels are different}

A common mistake is to see the label $3$-$2$-$1$ and assume that intrinsic
$3$-$2$-$1$ and extrinsic $3$-$2$-$1$ are the same construction.

They are not.

For the same angle list $(\alpha,\beta,\gamma)$,

\begin{equation}
C_{{\rm int},321}
=
C_1(\gamma)
C_2(\beta)
C_3(\alpha),
\end{equation}

whereas

\begin{equation}
C_{{\rm ext},321}
=
C_3(\alpha)
C_2(\beta)
C_1(\gamma).
\end{equation}

Finite rotations generally do not commute, so these products are generally
different.

\subsection*{Numerical comparison}

Take

\[
\alpha=30^\circ,
\qquad
\beta=20^\circ,
\qquad
\gamma=10^\circ.
\]

The intrinsic $3$-$2$-$1$ passive matrix is approximately

\begin{equation}
C_{{\rm int},321}
=
\begin{bmatrix}
+0.8138 &amp; +0.4698 &amp; -0.3420\\
-0.4410 &amp; +0.8826 &amp; +0.1632\\
+0.3785 &amp; +0.0180 &amp; +0.9254
\end{bmatrix}.
\end{equation}

The extrinsic $3$-$2$-$1$ passive matrix is approximately

\begin{equation}
C_{{\rm ext},321}
=
\begin{bmatrix}
+0.8138 &amp; +0.5438 &amp; -0.2049\\
-0.4698 &amp; +0.8232 &amp; +0.3188\\
+0.3420 &amp; -0.1632 &amp; +0.9254
\end{bmatrix}.
\end{equation}

The entries differ, so the two interpretations produce different final
orientations.

\section{The reverse-order equivalence}

Intrinsic and extrinsic descriptions do have an exact equivalence, but the
axis order and angle order reverse together.

For intrinsic $i$-$j$-$k$ with angles $(\alpha,\beta,\gamma)$,

\begin{equation}
C_{\rm int}
=
C_k(\gamma)
C_j(\beta)
C_i(\alpha).
\end{equation}

Now consider extrinsic $k$-$j$-$i$ with angles
$(\gamma,\beta,\alpha)$.

The extrinsic rule gives

\begin{equation}
C_{\rm ext}
=
C_k(\gamma)
C_j(\beta)
C_i(\alpha).
\end{equation}

Thus

\begin{equation}
\text{intrinsic }i\text{-}j\text{-}k
(\alpha,\beta,\gamma)
\quad\Longleftrightarrow\quad
\text{extrinsic }k\text{-}j\text{-}i
(\gamma,\beta,\alpha).
\end{equation}

\begin{center}
\includegraphics[width=0.94\textwidth]{EA03_intrinsic_extrinsic_equivalence.png}

\vspace{0.45em}

\textbf{Figure.}
Reverse-order equivalence.  Intrinsic $3$-$2$-$1$ with
$(\alpha,\beta,\gamma)$ and extrinsic $1$-$2$-$3$ with
$(\gamma,\beta,\alpha)$ produce the same passive DCM and the same final
orientation.
\end{center}

For the important $3$-$2$-$1$ case,

\begin{equation}
\text{intrinsic }3\text{-}2\text{-}1
(\alpha,\beta,\gamma)
\quad\Longleftrightarrow\quad
\text{extrinsic }1\text{-}2\text{-}3
(\gamma,\beta,\alpha).
\end{equation}

The safest memory rule is:

\begin{quote}
Reverse the axis order and reverse the associated angle order.
\end{quote}

\section{Aerospace yaw pitch roll}

PhysicsLibrary specializes intrinsic $3$-$2$-$1$ to

\begin{equation}
\alpha=\psi,
\qquad
\beta=\theta,
\qquad
\gamma=\phi,
\end{equation}

where $\psi$ is yaw, $\theta$ is pitch, and $\phi$ is roll.

Therefore

\begin{equation}
{}^BC_A
=
C_1(\phi)
C_2(\theta)
C_3(\psi).
\end{equation}

The equivalent extrinsic description is $1$-$2$-$3$ with chronological
angles

\begin{equation}
(\phi,\theta,\psi).
\end{equation}

In words:

\begin{enumerate}

\item intrinsic: yaw about the current $3$ axis, then pitch about the new $2$
axis, then roll about the newest $1$ axis;

\item equivalent extrinsic: roll about fixed axis $1_A$, then pitch about
fixed axis $2_A$, then yaw about fixed axis $3_A$.

\end{enumerate}

Both descriptions give the same final orientation when the association is
handled exactly as stated.

\section{Body fixed and space fixed terminology}

Many mechanics and software references use the phrases
\emph{body fixed} and \emph{space fixed}.

In the terminology used here:

\begin{center}
\begin{tabular}{|c|c|c|}
\hline
Term &amp; Axis behavior &amp; PhysicsLibrary word\\
\hline
Body fixed &amp; each new axis belongs to an intermediate moving frame &amp;
intrinsic\\
\hline
Space fixed &amp; each axis remains attached to the original reference frame &amp;
extrinsic\\
\hline
\end{tabular}
\end{center}

SymPy's reference frame tools use this distinction directly:
\texttt{orient\_body\_fixed} performs rotations about successive intermediate frame
axes, while \texttt{orient\_space\_fixed} performs rotations about the parent frame
axes.

The terminology is helpful, but an engineering article should still state the
axis sequence and transformation direction explicitly.

\section{Intrinsic versus extrinsic is independent of active versus passive}

There are two independent questions:

\begin{enumerate}

\item Which axes define the sequence?

\item What object is being transformed?

\end{enumerate}

Intrinsic versus extrinsic answers the first question.

Active versus passive answers the second.

An active rotation changes a physical vector while the coordinate frame is
held fixed.

A passive rotation changes the coordinate representation by changing the
frame while the physical vector is held fixed.

Therefore all four combinations are possible:

\begin{center}
\begin{tabular}{|c|c|c|}
\hline
 &amp; Intrinsic axes &amp; Extrinsic axes\\
\hline
Passive &amp; moving frame axes, coordinate map &amp; fixed reference axes, coordinate
map\\
\hline
Active &amp; moving axes, vector rotation &amp; fixed axes, vector rotation\\
\hline
\end{tabular}
\end{center}

PhysicsLibrary's house convention is passive and intrinsic unless explicitly
stated otherwise.

\section{Why different references appear to reverse the order}

Several independent reversals can occur in the literature:

\begin{enumerate}

\item intrinsic versus extrinsic descriptions;

\item active versus passive transformations;

\item $A\rightarrow B$ versus $B\rightarrow A$ map direction;

\item chronological rotation order versus written matrix multiplication order;

\item first-second-third angle notation versus physical yaw-pitch-roll names.

\end{enumerate}

A formula should not be judged by matrix order alone.

The frame labels and the definitions of the three angles must be read first.

\section{Software convention diagnostics}

Modern software libraries make the intrinsic/extrinsic distinction explicit,
but their notation is not universal.

SciPy uses uppercase axis strings such as \texttt{ZYX} for intrinsic rotations and
lowercase strings such as \texttt{zyx} for extrinsic rotations.

SymPy uses \texttt{orient\_body\_fixed} for intrinsic moving axis rotations and
\texttt{orient\_space\_fixed} for extrinsic fixed axis rotations.

These APIs are useful convention checks, but their returned rotation objects
must still be reconciled with the PhysicsLibrary passive map direction before
numerical matrices are copied into an article or simulation.

\section{A frame-label derivation of the intrinsic rule}

The intrinsic rule can be understood without memorizing matrix order.

For the first rotation,

\begin{equation}
{}^{A_1}C_A
=
C_i(\alpha).
\end{equation}

For the second,

\begin{equation}
{}^{A_2}C_{A_1}
=
C_j(\beta).
\end{equation}

For the third,

\begin{equation}
{}^BC_{A_2}
=
C_k(\gamma).
\end{equation}

Coordinate maps compose by matching adjacent frame labels:

\begin{equation}
{}^BC_A
=
{}^BC_{A_2}
\,{}^{A_2}C_{A_1}
\,{}^{A_1}C_A.
\end{equation}

Therefore

\begin{equation}
{}^BC_A
=
C_k(\gamma)
C_j(\beta)
C_i(\alpha).
\end{equation}

This frame-chain argument is usually safer than relying on a verbal rule such
as ``multiply in reverse order.''

\section{Checks for an intrinsic/extrinsic conversion}

When converting a sequence description, verify all of the following.

\begin{enumerate}

\item The final DCM is unchanged.

\item The axis order has reversed.

\item The angle association has reversed with the axes.

\item Passive versus active interpretation has not silently changed.

\item The coordinate map direction has not silently changed.

\item Single-angle reductions still agree.

\end{enumerate}

\section{Common mistakes}

\begin{enumerate}

\item Calling a sequence ``$3$-$2$-$1$'' without stating intrinsic or
extrinsic.

\item Assuming intrinsic and extrinsic $3$-$2$-$1$ are identical.

\item Reversing the axis order but forgetting to reverse the angle
association.

\item Confusing a moving axis with an axis that merely has the same numerical
label.

\item Treating ``body fixed'' as a statement about active versus passive
rotation rather than about the axes used for successive rotations.

\item Copying a SciPy or robotics matrix without checking its active/passive
and map-direction conventions.

\item Forgetting that the rightmost matrix acts first on a coordinate column.

\end{enumerate}

\section{Summary}

Intrinsic and extrinsic Euler rotations differ in the axes used for successive
rotations.

For intrinsic $i$-$j$-$k$,

\begin{equation}
{}^BC_A
=
C_k(\gamma)
C_j(\beta)
C_i(\alpha).
\end{equation}

For extrinsic $i$-$j$-$k$,

\begin{equation}
{}^BC_A
=
C_i(\alpha)
C_j(\beta)
C_k(\gamma).
\end{equation}

Therefore

\begin{equation}
\text{intrinsic }i\text{-}j\text{-}k
(\alpha,\beta,\gamma)
\equiv
\text{extrinsic }k\text{-}j\text{-}i
(\gamma,\beta,\alpha).
\end{equation}

The distinction is geometric:

\begin{itemize}

\item intrinsic rotations use axes of successive moving frames;

\item extrinsic rotations use axes fixed in the original frame.

\end{itemize}

It is independent of the active/passive distinction.

The next article,
\emph{Euler sequence composition and the twelve standard sequences},
uses these rules to organize all six Tait Bryan and all six proper Euler
sequences in one consistent framework.

\section{References and further reading}

Henderson provides a classic NASA engineering treatment of Euler
transformations and their matrix relationships.

Moore's multibody dynamics text illustrates successive body fixed frame
orientations through explicit intermediate reference frames.

SymPy's reference frame documentation formalizes the body fixed versus space
fixed distinction in software.

SciPy's Euler angle API explicitly distinguishes intrinsic and extrinsic axis
sequences.

Diebel provides a broad attitude representation reference useful when
comparing Euler conventions with DCM and quaternion conventions.

\begin{thebibliography}{9}

\bibitem{Henderson1977}
D. M. Henderson,
\emph{Euler Angles, Quaternions, and Transformation Matrices:
Working Relationships},
JSC-12960,
NASA Johnson Space Center,
1977.
\PMlinkexternal{NASA Technical Reports Server}
{https://ntrs.nasa.gov/citations/19770024290}

\bibitem{Moore2026}
J. K. Moore,
\emph{Learn Multibody Dynamics},
chapter ``Orientation of Reference Frames,''
2026 edition.
Licensed CC BY 4.0.
\PMlinkexternal{Orientation of Reference Frames}
{https://moorepants.github.io/learn-multibody-dynamics/orientation.html}

\bibitem{SymPyReferenceFrames}
SymPy Development Team,
``ReferenceFrame orientation methods,''
SymPy documentation.
\PMlinkexternal{SymPy ReferenceFrame documentation}
{https://docs.sympy.org/latest/modules/physics/vector/api/classes.html}

\bibitem{SciPyEuler}
SciPy Developers,
``Rotation.from\_euler,''
SciPy documentation.
\PMlinkexternal{SciPy Euler rotation documentation}
{https://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.transform.Rotation.from_euler.html}

\bibitem{Diebel2006}
J. Diebel,
``Representing Attitude:
Euler Angles, Unit Quaternions, and Rotation Vectors,''
Stanford University,
2006.
\PMlinkexternal{Online PDF}
{https://www.astro.rug.nl/software/kapteyn-beta/_downloads/attitude.pdf}

\end{thebibliography}

\section*{License}

Unless otherwise noted, this PhysicsLibrary entry is intended for release
under the Creative Commons Attribution ShareAlike 4.0 International license.</content>
</record>
