We can specify the orientation of a body by specifying the rotation that takes the body to this orientation from some reference orientation. As the body moves, the rotation that does this changes. The angular velocity vector can be written in terms of this changing rotation along a path.

Let *q* be the coordinate path that we will use to describe
the motion of the body. Let *M*(*q*(*t*)) be the rotation
that takes the body from the reference orientation to the orientation
specified by *q*(*t*) (see figure 2.1). Let
_{}(*t*) be the vector to some constituent particle with the body
in the orientation specified by *q*(*t*), and let _{}' be
the vector to the same constituent with the body in the reference
orientation.
Then

The constituent vectors
_{}^{/} do not depend on the configuration, because they
are the vectors to the positions of the constituents with the body in a
fixed reference orientation.

We have already found an expression for the kinetic energy in terms of
the angular velocity vector and the inertia tensor. Here we do this in a
different way. To compute the kinetic energy we accumulate the
contributions from all of the mass elements. The positions of the
constituent particles, at a given time *t*, are

where *M* = *M* o *q*. The velocity is the
time derivative

Using equation (2.32), we can write

Recall that the velocity results from a rotation, and that the velocities are (see equation 2.11)

Thus we can identify the operator (*t*) × with *D**M*(*t*)
(*M*(*t*))^{-1}. To form the kinetic energy we need to extract
(*t*) from this.

If a vector is represented by the component matrix ** u** with components

The inverse of this function can
be applied to any skew-symmetric matrix, and so we can use
*A*^{-1} to extract the components of the angular velocity vector
from the matrix representation of ×
in terms of *M*:

where ** M** and

The components ' of the angular velocity vector on the
principal axes are ' = *M*^{T} , so

The relationship of the angular velocity vector to the path is a kinematic relationship; it is valid for any path. Thus we can abstract it to obtain the components of the angular velocity at a moment given the configuration and velocity at that moment.

The following procedure gives the components of the angular velocity as a function of time along the path:

`(define (((M-of-q->omega-of-t M-of-q) q) t)
(define M-on-path (compose M-of-q q))
(define (omega-cross t)
(* ((D M-on-path) t)
(m:transpose (M-on-path t))))
(antisymmetric->column-matrix (omega-cross t)))
`

The procedure `omega-cross` produces the matrix representation of
×. The procedure `antisymmetric->column-matrix`, which corresponds to the function
*A*^{-1}, is used to extract the
components of the angular velocity vector from the skew-symmetric
× matrix.

The body components of the angular velocity vector as a function of time along the path are

`(define (((M-of-q->omega-body-of-t M-of-q) q) t)
(* (m:transpose (M-of-q (q t)))
(((M-of-q->omega-of-t M-of-q) q) t)))
`

We can get the procedures of local state that give the angular velocity
components by abstracting these procedures along arbitrary paths that
have given coordinates and velocities. The abstraction of a procedure
of a path to a procedure of state is accomplished by `Gamma-bar`
(see section 1.9):

`(define (M->omega M-of-q)
(Gamma-bar
(M-of-q->omega-of-t M-of-q)))
(define (M->omega-body M-of-q)
(Gamma-bar
(M-of-q->omega-body-of-t M-of-q)))
`

These procedures give the angular velocities as a function of state.
We will see them in action after we get some `M-of-q`'s with
which to work.