22 return rows[row_index];
25 return rows[row_index];
30 return {rows[0].
dot(vector), rows[1].
dot(vector), rows[2].
dot(vector)};
35 return {{rows[0].
x, rows[1].
x, rows[2].
x},
36 {rows[0].
y, rows[1].
y, rows[2].
y},
37 {rows[0].
z, rows[1].
z, rows[2].
z}};
42 return {rows[0][column_index], rows[1][column_index], rows[2][column_index]};
47 return {rows[0] * scalar, rows[1] * scalar, rows[2] * scalar};
52 return rows[0].
x * (rows[1].
y * rows[2].
z - rows[1].
z * rows[2].
y) -
53 rows[0].y * (rows[1].x * rows[2].z - rows[1].z * rows[2].x) +
54 rows[0].
z * (rows[1].
x * rows[2].
y - rows[1].
y * rows[2].
x);
59 Real determinant_value = determinant();
61 inverse_matrix[0] = {(rows[1].
y * rows[2].
z - rows[1].
z * rows[2].
y) / determinant_value,
62 (rows[0].z * rows[2].y - rows[0].y * rows[2].z) / determinant_value,
63 (rows[0].
y * rows[1].
z - rows[0].
z * rows[1].
y) / determinant_value};
64 inverse_matrix[1] = {(rows[1].
z * rows[2].
x - rows[1].
x * rows[2].
z) / determinant_value,
65 (rows[0].x * rows[2].z - rows[0].z * rows[2].x) / determinant_value,
66 (rows[0].
z * rows[1].
x - rows[0].
x * rows[1].
z) / determinant_value};
67 inverse_matrix[2] = {(rows[1].
x * rows[2].
y - rows[1].
y * rows[2].
x) / determinant_value,
68 (rows[0].y * rows[2].x - rows[0].x * rows[2].y) / determinant_value,
69 (rows[0].
x * rows[1].
y - rows[0].
y * rows[1].
x) / determinant_value};
70 return inverse_matrix;
3×3 matrix stored row-major: row i = mat[i]
Matrix3x3 transpose() const
Transpose.
Vector3D operator*(const Vector3D &vector) const
Matrix-vector product M * vector.
Real determinant() const
Determinant.
Matrix3x3(Vector3D row_0, Vector3D row_1, Vector3D row_2)
Vector3D & operator[](int row_index)
Matrix3x3 inverse() const
Inverse (assumes non-singular)
Matrix3x3 operator*(Real scalar) const
Scalar multiplication.
const Vector3D & operator[](int row_index) const
Vector3D column(int column_index) const
Column column_index as a Vector3D.
Real dot(const Vector3D &other) const