8 #ifndef _SEUTILS_MAT22_H_ 9 #define _SEUTILS_MAT22_H_ 17 Mat22
operator*(
const Mat22& a,
const Mat22& b);
25 Mat22(
double m1,
double m2,
double m3,
double m4) :
m_mat { m1,
m2,
m3, m4 } {
32 std::get<3>(tuple)} {}
54 *
this = *
this * other;
62 out[0] =
m_mat[3] * inv_det; out[1] = -
m_mat[1] * inv_det;
63 out[2] = -
m_mat[2] * inv_det; out[3] =
m_mat[0] * inv_det;
65 assert(
m_mat[0] * out[0] +
m_mat[1] * out[2] >= 1 - 1
e-8);
66 assert(
m_mat[0] * out[1] +
m_mat[1] * out[3] <= 1
e-8);
67 assert(
m_mat[2] * out[0] +
m_mat[3] * out[2] <= 1
e-8);
68 assert(
m_mat[2] * out[1] +
m_mat[3] * out[3] >= 1 - 1
e-8);
86 out[0] = a[0] * b[0] + a[1] * b[2];
87 out[1] = a[0] * b[1] + a[1] * b[3];
88 out[2] = a[2] * b[0] + a[3] * b[2];
89 out[3] = a[2] * b[1] + a[3] * b[3];