April 2013
Intermediate to advanced
575 pages
15h 54m
English
This appendix implements a class called Matrix3x3 that encapsulates all of the operations
you need to handle 3×3 (nine-element) matrices when writing 3D rigid-body
simulations.
The Matrix3x3 class is defined with nine elements, eij,
where i represents the ith row
and j the jth column. For
example, e21 refers to the
element on the second row in the first column. Here’s how all of the
elements are arranged:

The class has two constructors, one of which initializes the matrix elements to zero, and the other of which initializes the elements to those passed to the constructor:
class Matrix3x3 { public: // elements eij: i -> row, j -> column float e11, e12, e13, e21, e22, e23, e31, e32, e33; Matrix3x3(void); Matrix3x3(float r1c1, float r1c2, float r1c3, float r2c1, float r2c2, float r2c3, float r3c1, float r3c2, float r3c3 ); float det(void); Matrix3x3 Transpose(void); Matrix3x3 Inverse(void); Matrix3x3& operator+=(Matrix3x3 m); Matrix3x3& operator-=(Matrix3x3 m); Matrix3x3& operator*=(float s); Matrix3x3& operator/=(float s); }; // Constructor inline Matrix3x3::Matrix3x3(void) { e11 = 0; e12 = 0; e13 = 0; e21 = 0; e22 = 0; e23 = 0; e31 = 0; e32 = 0; e33 = 0; } // Constructor inline Matrix3x3::Matrix3x3(float r1c1, float r1c2, float r1c3, float r2c1, float r2c2, float r2c3, float r3c1, float r3c2, float r3c3 ) { e11 = r1c1; e12 = r1c2; e13 = r1c3; ...