#include <MRMatrix3.h>
Classes | |
| struct | QR |
| returns 3 Euler angles, assuming this is a rotation matrix composed as follows: R=R(z)*R(y)*R(x) More... | |
Public Types | |
| using | ValueType = T |
| using | VectorType = Vector3<T> |
Public Member Functions | |
| constexpr | Matrix3 () noexcept |
| constexpr | Matrix3 (const Vector3< T > &x, const Vector3< T > &y, const Vector3< T > &z) |
| initializes matrix from its 3 rows | |
| template<typename U > | |
| MR_REQUIRES_IF_SUPPORTED (!std::is_same_v< T, U >) const expr explicit Matrix3(const Matrix3< U > &m) | |
| constexpr const Vector3< T > & | operator[] (int row) const noexcept |
| row access | |
| constexpr Vector3< T > & | operator[] (int row) noexcept |
| constexpr Vector3< T > | col (int i) const noexcept |
| column access | |
| constexpr T | trace () const noexcept |
| computes trace of the matrix | |
| constexpr T | normSq () const noexcept |
| compute sum of squared matrix elements | |
| constexpr auto | norm () const noexcept |
| constexpr T | det () const noexcept |
| computes determinant of the matrix | |
| constexpr Matrix3< T > inverse() const noexcept MR_REQUIRES_IF_SUPPORTED(!std constexpr Matrix3< T > | transposed () const noexcept |
| computes inverse matrix | |
Static Public Member Functions | |
| static constexpr Matrix3 | zero () noexcept |
| static constexpr Matrix3 | identity () noexcept |
| static constexpr Matrix3 | scale (T s) noexcept |
| returns a matrix that scales uniformly | |
| static constexpr Matrix3 | scale (T sx, T sy, T sz) noexcept |
| returns a matrix that has its own scale along each axis | |
| static constexpr Matrix3 | scale (const Vector3< T > &s) noexcept |
| static constexpr Matrix3 | fromColumns (const Vector3< T > &x, const Vector3< T > &y, const Vector3< T > &z) noexcept |
Public Attributes | |
| Vector3< T > | x { 1, 0, 0 } |
| rows, identity matrix by default | |
| Vector3< T > | y { 0, 1, 0 } |
| Vector3< T > | z { 0, 0, 1 } |
Static Public Attributes | |
| static constexpr Matrix3 static rotation(const Vector3< T > &axis, T angle) noexcept MR_REQUIRES_IF_SUPPORTED(std constexpr Matrix3 static rotation(const Vector3< T > &from, const Vector3< T > &to) noexcept MR_REQUIRES_IF_SUPPORTED(std constexpr Matrix3 static rotationFromEuler(const Vector3< T > &eulerAngles) noexcept MR_REQUIRES_IF_SUPPORTED(std constexpr Matrix3 static approximateLinearRotationMatrixFromEuler(const Vector3< T > &eulerAngles) noexcept MR_REQUIRES_IF_SUPPORTED(std constexpr Matrix | fromRows )(const Vector3< T > &x, const Vector3< T > &y, const Vector3< T > &z) noexcept |
| creates matrix representing rotation around given axis on given angle | |
Friends | |
| QR qr() const noexcept MR_REQUIRES_IF_SUPPORTED(!std friend constexpr bool | operator== (const Matrix3< T > &a, const Matrix3< T > &b) |
| decompose this matrix on the product Q*R, where Q is orthogonal and R is upper triangular | |
| constexpr bool | operator!= (const Matrix3< T > &a, const Matrix3< T > &b) |
| constexpr auto | operator+ (const Matrix3< T > &a, const Matrix3< T > &b) -> Matrix3< decltype(std::declval< T >()+std::declval< T >())> |
NOTE: We use std::declval() in the operators below because libclang 18 in our binding generator is bugged and chokes on decltyping a.x and such. TODO fix this when we update libclang. | |
| constexpr auto | operator- (const Matrix3< T > &a, const Matrix3< T > &b) -> Matrix3< decltype(std::declval< T >() - std::declval< T >())> |
| constexpr auto | operator* (T a, const Matrix3< T > &b) -> Matrix3< decltype(std::declval< T >() *std::declval< T >())> |
| constexpr auto | operator* (const Matrix3< T > &b, T a) -> Matrix3< decltype(std::declval< T >() *std::declval< T >())> |
| constexpr auto | operator/ (Matrix3< T > b, T a) -> Matrix3< decltype(std::declval< T >()/std::declval< T >())> |
| constexpr Matrix3< T > & | operator+= (Matrix3< T > &a, const Matrix3< T > &b) |
| constexpr Matrix3< T > & | operator-= (Matrix3< T > &a, const Matrix3< T > &b) |
| constexpr Matrix3< T > & | operator*= (Matrix3< T > &a, T b) |
| constexpr Matrix3< T > & | operator/= (Matrix3< T > &a, T b) |
| constexpr auto | operator* (const Matrix3< T > &a, const Vector3< T > &b) -> Vector3< decltype(dot(std::declval< Vector3< T > >(), std::declval< Vector3< T > >()))> |
| x = a * b | |
| constexpr auto | operator* (const Matrix3< T > &a, const Matrix3< T > &b) -> Matrix3< decltype(dot(std::declval< Vector3< T > >(), std::declval< Vector3< T > >()))> |
| product of two matrices | |
| std::ostream & | operator<< (std::ostream &s, const Matrix3 &mat) |
| std::istream & | operator>> (std::istream &s, Matrix3 &mat) |
Related Symbols | |
(Note that these are not member symbols.) | |
| template<typename T > | |
| auto | dot (const Matrix3< T > &a, const Matrix3< T > &b) -> decltype(dot(a.x, b.x)) |
| double-dot product: x = a : b | |
| template<typename T > | |
| Matrix3< T > | outer (const Vector3< T > &a, const Vector3< T > &b) |
| x = a * b^T | |
arbitrary 3x3 matrix