One of the main keys to truly understanding the kinematics of human motion, is to recognize that the ONLY degrees of freedom (DOF) in the human body are angular kinematic DOF. There are no translational or linear DOF in the human skeletal system. In reality, there is some translational “slop” in human joints provided by ligaments, soft tissues, and joint surface contact areas as arthrokinematic joints reach their physiologic range of motion limitations; however as discussed in the rigid body mechanics section, for modeling purposes the human skeletal system can be viewed as a system of osteokinematic rigid links connected by joints.

Three dimensional (3D) positional analysis is very easy to understand conceptually and also very easy to implement post-processing algorithm work such as filtering or interpolation routines. Body locations are stored simply as a 3D point (x, y, z) and all we need to know is the value for each coordinate axis. The order is not important just as long as we know the value for each axis. For example, for 3D point (1024, 512, 256) we can get to the exact 3D point by moving 1st in any of the 3 axes by the appropriate coordinate value, followed by the appropriate coordinate value in either of the 2 remaining axes, and then measuring the final distance in the remaining axis. This process can be repeated for any of the different axis combinations – eg., XYZ, YXZ, ZXY, etc – and we still get to the same exact 3D spot in every scenario simply by using the (X, Y, Z) values in any order.

The same cannot be said for working with rotations. Unfortunately working with 3D rotations is not nearly as simple as working with 3D positions, but it is much more important for any kinematic analysis or subsequent kinetic analysis. That is because all human movement is based on joint rotational DOF. While we can measure the 3D position of any point along any segment of the human body, we can only get from point A to point B through an underlying joint rotational DOF. So it is critical to know how to work with 3D rotations for kinematic analysis.

To characterize any human body segment, we need to specify the 3D position of the body segment stored as a 3D point (x, y, z) as well as the segment rotational information. For 3D rotations, there are a number of different ways to represent the same rotation, although each will result in very different numbers:

**Euler Angles:**Euler’s theorem states that all 3D rotations can be represented by three ordered rotations. Thus, Euler Angles requires 3 ordered rotations around orthogonal axes. The axes can be world or local axes. The order of the rotations is important as they are non-commutative. Euler angles have a number of problems that make them difficult to use as a general rotation format. There is no easy concatenation of rotations, interpolation algorithms for missing or noisy data are very complicated due to the orthogonal ordered rotations, and a condition known as gimbal lock can occur when axes align after of a series of rotations. Euler angles can be used as a compact methodology for displaying the series of rotations, but it is necessary to use 3×3 rotation matrices for any subsequent analysis. For these reasons, they are not often used in 3D animation as they are not computationally cheap.**Axis-Angle:**Euler also proved that any 3D rotation can be represented as a rotation around an arbitrary axis. And that leads to the Axis-Angle format, which specifies an axis and how much rotation around it in a counterclockwise direction via right hand rule. Similar to Euler Angles, this methodology requires the 3×3 rotation matrix to concatenate in post-processing algorithms.**Rotation matrices:**3×3 rotation matrices are ideal for any computational work, especially rotations, transformations, and concatenations. They are not ideal for interpolation algorithms, but there are routines that can help with maintaining orthonormal requirements. Rotation matrices are often used in post-processing algorithms, especially custom routines. However, because 9 variables are required in the 3×3 matrix at each time step, they are not favored in character animation routines.**Quaternions:**these are 4 parameter representations of rotations which is essentially a modified axis-angle representation using an extension to complex numbers. Multiplication of two quaternions is non-commutative. Quaternion based extended Kalman filtering algorithms are often used with 9 DOF IMU data for estimating 3D positions. Quaternions are also used for any computationally sensitive algorithms because only 4 variables are required for each time step to specify 3D rotations as opposed to the more computationally expensive 3×3 rotation matrix.

The Direction Cosines and Rotation Matrices post provides a very detailed review of 3×3 rotation matrices and how to develop them from Euler angle rotation sets.