23 template <
class MATRIXLIKE1,
class MATRIXLIKE2>
27 ASSERT_(M.isSquare() && M.rows() == 4);
40 out_inverse_M.setSize(4, 4);
43 out_inverse_M.set_unsafe(0, 0, M.get_unsafe(0, 0));
44 out_inverse_M.set_unsafe(0, 1, M.get_unsafe(1, 0));
45 out_inverse_M.set_unsafe(0, 2, M.get_unsafe(2, 0));
47 out_inverse_M.set_unsafe(1, 0, M.get_unsafe(0, 1));
48 out_inverse_M.set_unsafe(1, 1, M.get_unsafe(1, 1));
49 out_inverse_M.set_unsafe(1, 2, M.get_unsafe(2, 1));
51 out_inverse_M.set_unsafe(2, 0, M.get_unsafe(0, 2));
52 out_inverse_M.set_unsafe(2, 1, M.get_unsafe(1, 2));
53 out_inverse_M.set_unsafe(2, 2, M.get_unsafe(2, 2));
55 const double tx = -M.get_unsafe(0, 3);
56 const double ty = -M.get_unsafe(1, 3);
57 const double tz = -M.get_unsafe(2, 3);
59 const double tx_ = tx * M.get_unsafe(0, 0) +
ty * M.get_unsafe(1, 0) +
60 tz * M.get_unsafe(2, 0);
61 const double ty_ = tx * M.get_unsafe(0, 1) +
ty * M.get_unsafe(1, 1) +
62 tz * M.get_unsafe(2, 1);
63 const double tz_ = tx * M.get_unsafe(0, 2) +
ty * M.get_unsafe(1, 2) +
64 tz * M.get_unsafe(2, 2);
66 out_inverse_M.set_unsafe(0, 3, tx_);
67 out_inverse_M.set_unsafe(1, 3, ty_);
68 out_inverse_M.set_unsafe(2, 3, tz_);
70 out_inverse_M.set_unsafe(3, 0, 0);
71 out_inverse_M.set_unsafe(3, 1, 0);
72 out_inverse_M.set_unsafe(3, 2, 0);
73 out_inverse_M.set_unsafe(3, 3, 1);
78 template <
class IN_ROTMATRIX,
class IN_XYZ,
class OUT_ROTMATRIX,
class OUT_XYZ>
80 const IN_ROTMATRIX& in_R,
const IN_XYZ& in_xyz, OUT_ROTMATRIX& out_R,
84 ASSERT_(in_R.isSquare() && in_R.rows() == 3 && in_xyz.size() == 3);
90 const T tx = -in_xyz[0];
91 const T
ty = -in_xyz[1];
92 const T
tz = -in_xyz[2];
94 out_xyz[0] = tx * in_R.get_unsafe(0, 0) +
ty * in_R.get_unsafe(1, 0) +
95 tz * in_R.get_unsafe(2, 0);
96 out_xyz[1] = tx * in_R.get_unsafe(0, 1) +
ty * in_R.get_unsafe(1, 1) +
97 tz * in_R.get_unsafe(2, 1);
98 out_xyz[2] = tx * in_R.get_unsafe(0, 2) +
ty * in_R.get_unsafe(1, 2) +
99 tz * in_R.get_unsafe(2, 2);
102 out_R = in_R.adjoint();
107 template <
class MATRIXLIKE>
110 ASSERTDEB_(M.cols() == M.rows() && M.rows() == 4);
112 const double tx = -M(0, 3);
113 const double ty = -M(1, 3);
114 const double tz = -M(2, 3);
115 M(0, 3) = tx * M(0, 0) +
ty * M(1, 0) +
tz * M(2, 0);
116 M(1, 3) = tx * M(0, 1) +
ty * M(1, 1) +
tz * M(2, 1);
117 M(2, 3) = tx * M(0, 2) +
ty * M(1, 2) +
tz * M(2, 2);