# Quaternion Classes (Advanced Methods in Computer Graphics)

This section gives an outline of methods in the classes that represent quaternion and dual quaternion numbers. Figure D.1 shows the static relationships between the classes and the geometry classes.

Fig. D.1 Relationships between the quaternion classes and the geometry classes

## Quaternion Class

Description:

Every quaternion object has an associated 4 x 4 transformation matrix _mat. The matrix elements are not automatically updated. The user needs to call updateMatrix to compute the values of the matrix elements. The constants RADTODEG and DEGTORAD store the conversion factors from radians to degrees and degrees to radians respectively. The quaternion components _q0, _q1, _q2, _q3 are declared as public as they are frequently accessed. EPS stores the constant value 1.E-6 used as a threshold for checking if a value is close to zero.

Description:

The first constructor initializes an object with four quaternion components. The second constructor takes a point P = (x, y, z) as the argument, and forms the pure quaternion (0, x, y, z). The third constructor forms a unit quaternion using the angle and axis of a threedimensional rotation as parameters. The quaternion is constructed as per Eq. 5.44. The fourth no-argument constructor initializes the quaternion components to (1, 0, 0, 0).

Description:

The first getter method given above returns the current matrix _mat. The second getter method returns the last three components _q1, _q2, _q3 of the current quaternion as a point. The third and fourth getter methods return respectively the angle and axis of the equivalent rotation given by Eqs. 5.45 and 5.46. The method getEuler extracts the Euler angles from the quaternion components using Eq. 5.56.

Description:

The methods listed above perform algebraic operations of addition, subtraction, multiplication, scalar multiplication, conjugation and negation, and return the resulting quaternion.

Description:

The above method returns the magnitude of the current quaternion (Eq. 5.17).

Description:

Each quaternion object has an associated transformation matrix as given in Eq. 5.23. The above method must be called whenever a quaternion component has changed, in order to update this matrix.

Description:

The above method transforms a point using the current quaternion according to the formula P’ = QPQ*.

Description:

The method normalize converts the current quaternion to a unit quaternion.

Description:

The above methods perform linear (lerp) and spherical linear (slerp) interpolations between the current quaternion and the supplied quaternion q, and return an intermediate quaternion for the parameter value given by t.

Description:

The above method prints the component values of the current quaternion.

## Dual Quaternion Class

Description:

Each dual quaternion is composed using two quaternions _quat1, _quat2 as described in Sect. 5.9.2.

Description:

The first constructor shown above forms a dual quaternion using two quaternion components. The second constructor using the rigid-body transformation parameters (angle and axis of rotation, and translation vector) to construct the equivalent dual quaternion. The third constructor creates the dual quaternion (1, 0, 0, 0, 0, x, y, z) using the coordinates (x, y, z) of the specified point.

Description:

The first two methods shown above return respectively the first and the second quaternion components of the current dual quaternion. The third method returns the last three elements (of the second quaternion component) as the coordinates of a point.

Description:

The above method returns the product of the current dual quaternion and the specified dual quaternion (q). The product is computed using the formula in Eq. 5.85.

Description:

The above method returns the product of the current dual quaternion and the specified quaternion (q). The product is computed using the formula in Eq. 5.86.

Description:

The above method transforms a point using the current quaternion according to the formula in Eq. 5.97.

Description:

The above method prints the component values of the current dual quaternion.