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)} {}
52 *
this = *
this * other;
60 out[0] =
m_mat[3] * inv_det; out[1] = -
m_mat[1] * inv_det;
61 out[2] = -
m_mat[2] * inv_det; out[3] =
m_mat[0] * inv_det;
63 assert(
m_mat[0] * out[0] +
m_mat[1] * out[2] >= 1 - 1
e-8);
64 assert(
m_mat[0] * out[1] +
m_mat[1] * out[3] <= 1
e-8);
65 assert(
m_mat[2] * out[0] +
m_mat[3] * out[2] <= 1
e-8);
66 assert(
m_mat[2] * out[1] +
m_mat[3] * out[3] >= 1 - 1
e-8);
84 out[0] = a[0] * b[0] + a[1] * b[2];
85 out[1] = a[0] * b[1] + a[1] * b[3];
86 out[2] = a[2] * b[0] + a[3] * b[2];
87 out[3] = a[2] * b[1] + a[3] * b[3];