32 constexpr Matrix3() noexcept :
m{{1, 0, 0}, {0, 1, 0}, {0, 0, 1}} {}
34 constexpr Matrix3(
double m00,
double m01,
double m02,
double m10,
double m11,
35 double m12,
double m20,
double m21,
double m22) noexcept
36 :
m{{m00, m01, m02}, {m10, m11, m12}, {m20, m21, m22}} {}
41 return Matrix3(0, 0, 0, 0, 0, 0, 0, 0, 0);
61 for (
int i = 0; i < 3; i++)
62 for (
int j = 0; j < 3; j++)
63 r.
m[i][j] =
m[i][j] + o.m[i][j];
71 for (
int i = 0; i < 3; i++)
72 for (
int j = 0; j < 3; j++)
73 r.
m[i][j] =
m[i][j] - o.m[i][j];
81 for (
int i = 0; i < 3; i++)
82 for (
int j = 0; j < 3; j++)
83 r.
m[i][j] =
m[i][j] * s;
91 return Vector3(
m[0][0] * v.x +
m[0][1] * v.y +
m[0][2] * v.z,
92 m[1][0] * v.x +
m[1][1] * v.y +
m[1][2] * v.z,
93 m[2][0] * v.x +
m[2][1] * v.y +
m[2][2] * v.z);
101 for (
int i = 0; i < 3; i++)
102 for (
int j = 0; j < 3; j++)
103 for (
int k = 0; k < 3; k++)
104 r.
m[i][j] +=
m[i][k] * o.m[k][j];
112 return Matrix3(
m[0][0],
m[1][0],
m[2][0],
m[0][1],
m[1][1],
m[2][1],
113 m[0][2],
m[1][2],
m[2][2]);
119 return m[0][0] * (
m[1][1] *
m[2][2] -
m[1][2] *
m[2][1]) -
120 m[0][1] * (
m[1][0] *
m[2][2] -
m[1][2] *
m[2][0]) +
121 m[0][2] * (
m[1][0] *
m[2][1] -
m[1][1] *
m[2][0]);
128 double eps = std::numeric_limits<double>::epsilon()) const noexcept {
131 if (std::abs(det) < eps)
134 double invDet = 1.0 / det;
138 r.
m[0][0] = (
m[1][1] *
m[2][2] -
m[1][2] *
m[2][1]) * invDet;
139 r.
m[0][1] = (
m[0][2] *
m[2][1] -
m[0][1] *
m[2][2]) * invDet;
140 r.
m[0][2] = (
m[0][1] *
m[1][2] -
m[0][2] *
m[1][1]) * invDet;
142 r.
m[1][0] = (
m[1][2] *
m[2][0] -
m[1][0] *
m[2][2]) * invDet;
143 r.
m[1][1] = (
m[0][0] *
m[2][2] -
m[0][2] *
m[2][0]) * invDet;
144 r.
m[1][2] = (
m[0][2] *
m[1][0] -
m[0][0] *
m[1][2]) * invDet;
146 r.
m[2][0] = (
m[1][0] *
m[2][1] -
m[1][1] *
m[2][0]) * invDet;
147 r.
m[2][1] = (
m[0][1] *
m[2][0] -
m[0][0] *
m[2][1]) * invDet;
148 r.
m[2][2] = (
m[0][0] *
m[1][1] -
m[0][1] *
m[1][0]) * invDet;
175 for (
int i = 0; i < 3; i++)
176 for (
int j = 0; j < 3; j++)
177 if (
m[i][j] != o.m[i][j])
188 os << std::fixed << std::setprecision(4);
190 for (
int i = 0; i < 3; i++)
191 os <<
"[" << mat.
m[i][0] <<
" " << mat.
m[i][1] <<
" " << mat.
m[i][2]
Vector3 operator*(double s, const Vector3 &v) noexcept
Left scalar multiplication helper (s * v).
Definition vector.hpp:412
3x3 matrix type used for rotations and inertia-tensor operations.
Definition matrix.hpp:27
double m[3][3]
Definition matrix.hpp:28
bool tryInverse(Matrix3 &out, double eps=std::numeric_limits< double >::epsilon()) const noexcept
Definition matrix.hpp:126
Vector3 operator*(const Vector3 &v) const noexcept
Definition matrix.hpp:90
double determinant() const noexcept
Definition matrix.hpp:118
constexpr Matrix3(double m00, double m01, double m02, double m10, double m11, double m12, double m20, double m21, double m22) noexcept
Definition matrix.hpp:34
bool operator!=(const Matrix3 &o) const noexcept
Definition matrix.hpp:183
constexpr Matrix3 operator*(double s) const noexcept
Definition matrix.hpp:78
const double * operator[](size_t i) const
Definition matrix.hpp:51
static constexpr Matrix3 identity() noexcept
Definition matrix.hpp:38
Matrix3 inverse() const noexcept
Definition matrix.hpp:154
static Matrix3 fromQuaternion(const Quaternion &q) noexcept
Definition matrix.hpp:164
constexpr Matrix3 operator-(const Matrix3 &o) const noexcept
Definition matrix.hpp:68
constexpr Matrix3() noexcept
Definition matrix.hpp:32
bool operator==(const Matrix3 &o) const noexcept
Definition matrix.hpp:174
constexpr Matrix3 operator+(const Matrix3 &o) const noexcept
Definition matrix.hpp:58
friend std::ostream & operator<<(std::ostream &os, const Matrix3 &mat)
Definition matrix.hpp:187
double * operator[](size_t i)
Definition matrix.hpp:46
Matrix3 transpose() const noexcept
Definition matrix.hpp:111
Matrix3 operator*(const Matrix3 &o) const noexcept
Definition matrix.hpp:98
static constexpr Matrix3 zero() noexcept
Definition matrix.hpp:40
Unit-quaternion rotation representation and rotation algebra helpers.
Definition quaternion.hpp:25
3D vector utility used throughout JSim physics.
Definition vector.hpp:22