MeshLib C++ Docs
Loading...
Searching...
No Matches
MR::Matrix3< T > Struct Template Reference

#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
 

Detailed Description

template<typename T>
struct MR::Matrix3< T >

arbitrary 3x3 matrix


The documentation for this struct was generated from the following file: