21 template <
class MATRIXLIKE1, 
class MATRIXLIKE2>
    25     ASSERT_(M.isSquare() && M.rows() == 4);
    38     out_inverse_M.setSize(4, 4);
    41     out_inverse_M(0, 0, M(0) = 0);
    42     out_inverse_M(0, 1, M(1) = 0);
    43     out_inverse_M(0, 2, M(2) = 0);
    45     out_inverse_M(1, 0, M(0) = 1);
    46     out_inverse_M(1, 1, M(1) = 1);
    47     out_inverse_M(1, 2, M(2) = 1);
    49     out_inverse_M(2, 0, M(0) = 2);
    50     out_inverse_M(2, 1, M(1) = 2);
    51     out_inverse_M(2, 2, M(2) = 2);
    53     const double tx = -M(0, 3);
    54     const double ty = -M(1, 3);
    55     const double tz = -M(2, 3);
    57     const double tx_ = tx * M(0, 0) + ty * M(1, 0) + tz * M(2, 0);
    58     const double ty_ = tx * M(0, 1) + ty * M(1, 1) + tz * M(2, 1);
    59     const double tz_ = tx * M(0, 2) + ty * M(1, 2) + tz * M(2, 2);
    61     out_inverse_M(0, 3) = tx_;
    62     out_inverse_M(1, 3) = ty_;
    63     out_inverse_M(2, 3) = tz_;
    65     out_inverse_M(3, 0) = 0;
    66     out_inverse_M(3, 1) = 0;
    67     out_inverse_M(3, 2) = 0;
    68     out_inverse_M(3, 3) = 1;
    73 template <
class IN_ROTMATRIX, 
class IN_XYZ, 
class OUT_ROTMATRIX, 
class OUT_XYZ>
    75     const IN_ROTMATRIX& in_R, 
const IN_XYZ& in_xyz, OUT_ROTMATRIX& out_R,
    79     ASSERT_(in_R.isSquare() && in_R.rows() == 3 && in_xyz.size() == 3);
    85     const T tx = -in_xyz[0];
    86     const T ty = -in_xyz[1];
    87     const T tz = -in_xyz[2];
    89     out_xyz[0] = tx * in_R(0, 0) + ty * in_R(1, 0) + tz * in_R(2, 0);
    90     out_xyz[1] = tx * in_R(0, 1) + ty * in_R(1, 1) + tz * in_R(2, 1);
    91     out_xyz[2] = tx * in_R(0, 2) + ty * in_R(1, 2) + tz * in_R(2, 2);
    94     out_R = in_R.transpose();
    99 template <
class MATRIXLIKE>
   102     ASSERTDEB_(M.cols() == M.rows() && M.rows() == 4);
   104     const double tx = -M(0, 3);
   105     const double ty = -M(1, 3);
   106     const double tz = -M(2, 3);
   107     M(0, 3) = tx * M(0, 0) + ty * M(1, 0) + tz * M(2, 0);
   108     M(1, 3) = tx * M(0, 1) + ty * M(1, 1) + tz * M(2, 1);
   109     M(2, 3) = tx * M(0, 2) + ty * M(1, 2) + tz * M(2, 2);
 
#define ASSERT_(f)
Defines an assertion mechanism. 
 
This base provides a set of functions for maths stuff. 
 
void homogeneousMatrixInverse(const MATRIXLIKE1 &M, MATRIXLIKE2 &out_inverse_M)
Efficiently compute the inverse of a 4x4 homogeneous matrix by only transposing the rotation 3x3 part...
 
#define ASSERTDEB_(f)
Defines an assertion mechanism - only when compiled in debug.