17 template<std::
floating_po
int T>
43 template<std::
floating_po
int T, AngularUnitTraits Units>
59 rv[2][3] = -
static_cast<T>(1);
64 template<std::
floating_po
int T>
68 rv[0][0] =
static_cast<T>(2) / (right - left);
71 rv[3][0] = - (right + left) / (right - left);
88 template<std::
floating_po
int T, AngularUnitTraits Units>
98 rotate[0][1] =
temp[0] * axis[1] + s * axis[2];
99 rotate[0][2] =
temp[0] * axis[2] - s * axis[1];
101 rotate[1][0] =
temp[1] * axis[0] - s * axis[2];
103 rotate[1][2] =
temp[1] * axis[2] + s * axis[0];
105 rotate[2][0] =
temp[2] * axis[0] + s * axis[1];
106 rotate[2][1] =
temp[2] * axis[1] - s * axis[0];
121 rv[3] =
m[0] *
v[0] +
m[1] *
v[1] +
m[2] *
v[2] +
m[3];
125 template<std::
floating_po
int T>
129 +
m[0][0] * (
m[1][1] *
m[2][2] -
m[2][1] *
m[1][2])
130 -
m[1][0] * (
m[0][1] *
m[2][2] -
m[2][1] *
m[0][2])
131 +
m[2][0] * (
m[0][1] *
m[1][2] -
m[1][1] *
m[0][2]
135 template<std::
floating_po
int T>
157 template<std::
floating_po
int T>
175 template<std::
floating_po
int T>
178 const T coef_00 =
m[2][2] *
m[3][3] -
m[3][2] *
m[2][3];
179 const T coef_02 =
m[1][2] *
m[3][3] -
m[3][2] *
m[1][3];
180 const T coef_03 =
m[1][2] *
m[2][3] -
m[2][2] *
m[1][3];
182 const T coef_04 =
m[2][1] *
m[3][3] -
m[3][1] *
m[2][3];
183 const T coef_06 =
m[1][1] *
m[3][3] -
m[3][1] *
m[1][3];
184 const T coef_07 =
m[1][1] *
m[2][3] -
m[2][1] *
m[1][3];
186 const T coef_08 =
m[2][1] *
m[3][2] -
m[3][1] *
m[2][2];
187 const T coef_10 =
m[1][1] *
m[3][2] -
m[3][1] *
m[1][2];
188 const T coef_11 =
m[1][1] *
m[2][2] -
m[2][1] *
m[1][2];
190 const T coef_12 =
m[2][0] *
m[3][3] -
m[3][0] *
m[2][3];
191 const T coef_14 =
m[1][0] *
m[3][3] -
m[3][0] *
m[1][3];
192 const T coef_15 =
m[1][0] *
m[2][3] -
m[2][0] *
m[1][3];
194 const T coef_16 =
m[2][0] *
m[3][2] -
m[3][0] *
m[2][2];
195 const T coef_18 =
m[1][0] *
m[3][2] -
m[3][0] *
m[1][2];
196 const T coef_19 =
m[1][0] *
m[2][2] -
m[2][0] *
m[1][2];
198 const T coef_20 =
m[2][0] *
m[3][1] -
m[3][0] *
m[2][1];
199 const T coef_22 =
m[1][0] *
m[3][1] -
m[3][0] *
m[1][1];
200 const T coef_23 =
m[1][0] *
m[2][1] -
m[2][0] *
m[1][1];
278 template<std::
floating_po
int T>
282 const T c2 =
sqrt(
m[0][0]*
m[0][0] +
m[1][0]*
m[1][0]);
327 for (
size_t i = 0;
i < 4; ++
i) {
328 for (
size_t j = 0;
j < 4; ++
j) {
336 for (
size_t i = 0;
i < 3;
i++) {
383 for (
size_t i = 0;
i < 3; ++
i) {
384 for(
size_t j = 0;
j < 3; ++
j) {
421 for (
size_t i = 0;
i < 3;
i++) {
423 Row[
i] *=
static_cast<T>(-1);
450 if (
trace >
static_cast<T>(0)) {
459 static int next[3] = {1, 2, 0};
461 if(
Row[1].y() >
Row[0].x())
i = 1;
480 template<std::
floating_po
int T>
489 rv[0][0] = + (
m[1][1] *
m[2][2] -
m[2][1] *
m[1][2]);
490 rv[1][0] = - (
m[1][0] *
m[2][2] -
m[2][0] *
m[1][2]);
491 rv[2][0] = + (
m[1][0] *
m[2][1] -
m[2][0] *
m[1][1]);
492 rv[0][1] = - (
m[0][1] *
m[2][2] -
m[2][1] *
m[0][2]);
493 rv[1][1] = + (
m[0][0] *
m[2][2] -
m[2][0] *
m[0][2]);
494 rv[2][1] = - (
m[0][0] *
m[2][1] -
m[2][0] *
m[0][1]);
495 rv[0][2] = + (
m[0][1] *
m[1][2] -
m[1][1] *
m[0][2]);
496 rv[1][2] = - (
m[0][0] *
m[1][2] -
m[1][0] *
m[0][2]);
497 rv[2][2] = + (
m[0][0] *
m[1][1] -
m[1][0] *
m[0][1]);
501 template<std::
floating_po
int T>
522 template<std::
floating_po
int T>
528 template<
typename T,
size_t C,
size_t R>
534 template<
typename T,
size_t C,
size_t R>
537 return m.data()->data();
541template<
typename T,
size_t C,
size_t R>
542struct std::hash<
osc::Matrix<T, C, R>> final {
constexpr reference x()
Returns (*this)[0]
Definition vector.h:157
constexpr reference z()
Returns (*this)[2]
Definition vector.h:167
constexpr reference y()
Returns (*this)[1]
Definition vector.h:162
constexpr pointer data()
Definition vector.h:141
Vector< T, 3 > scale(const Vector< T, 3 > &v, T desiredLength)
Definition matrix_functions.h:301
Vector< T, 3 > combine(const Vector< T, 3 > &a, const Vector< T, 3 > &b, T ascl, T bscl)
Make a linear combination of two vectors and return the result.
Definition matrix_functions.h:295
Definition custom_decoration_generator.h:5
EulerAngles extract_eulers_xyz(const Quaternion &)
bool equal_within_epsilon(T x, T y)
Definition common_functions.h:265
GenType cos(GenType v)
Definition trigonometric_functions.h:34
constexpr Matrix< T, 3, 3 > adjugate(const Matrix< T, 3, 3 > &m)
Definition matrix_functions.h:481
T length(const Vector< T, N > &v)
Definition geometric_functions.h:60
Matrix< T, 4, 4 > translate(const Matrix< T, 4, 4 > &m, const Vector< T, 3 > &v)
Definition matrix_functions.h:118
Matrix< T, 4, 4 > look_at(const Vector< T, 3 > &eye, const Vector< T, 3 > ¢er, const Vector< T, 3 > &up)
Definition matrix_functions.h:18
constexpr T dot(T x, T y)
Definition geometric_functions.h:29
Matrix< T, 4, 4 > perspective(Angle< T, Units > vertical_field_of_view, T aspect, T z_near, T z_far)
Definition matrix_functions.h:44
Matrix< T, 4, 4 > ortho(T left, T right, T bottom, T top, T z_near, T z_far)
Definition matrix_functions.h:65
constexpr U to(T &&value)
Definition conversion.h:56
GenType sin(GenType v)
Definition trigonometric_functions.h:13
Matrix< T, 3, 3 > normal_matrix(const Matrix< T, 4, 4 > &m)
Definition matrix_functions.h:502
Matrix< T, 4, 4 > rotate(const Matrix< T, 4, 4 > &m, Angle< T, Units > angle, Vector< T, 3 > axis)
Definition matrix_functions.h:89
T inverse(const Matrix< T, 3, 3 > &m)
Definition matrix_functions.h:158
Matrix< T, 4, 4 > normal_matrix4x4(const Matrix< T, 4, 4 > &m)
Definition matrix_functions.h:523
Vector< T, N > normalize(const Vector< T, N > &v)
Definition geometric_functions.h:74
RadiansT< Rep > atan2(Rep x, Rep y)
Definition trigonometric_functions.h:100
T determinant_of(const Matrix< T, 3, 3 > &m)
Definition matrix_functions.h:126
Matrix< T, 4, 4 > scale(const Matrix< T, 4, 4 > &m, const Vector< T, 3 > &v)
Definition matrix_functions.h:78
constexpr Matrix< T, 3, 3 > transpose(const Matrix< T, 3, 3 > &m)
Definition matrix_functions.h:234
GenType tan(GenType v)
Definition trigonometric_functions.h:58
T sqrt(T num)
Definition geometric_functions.h:14
bool decompose(const Matrix< T, 4, 4 > &model_matrix, Vector< T, 3 > &r_scale, Qua< T > &r_orientation, Vector< T, 3 > &r_translation, Vector< T, 3 > &r_skew, Vector< T, 4 > &r_perspective)
Definition matrix_functions.h:308
constexpr const T * value_ptr(const Rgba< T > &rgba)
Definition rgba.h:180
size_t hash_range(const Range &range) noexcept(noexcept(hash_combine(0, *std::ranges::begin(range))))
Definition hash_helpers.h:36
constexpr CoordinateDirection cross(CoordinateDirection x, CoordinateDirection y)
Definition coordinate_direction.h:117
constexpr pointer data()
Definition matrix3x3.h:113
size_t operator()(const osc::Matrix< T, C, R > &m) const
Definition matrix_functions.h:543