MeshLib C++ Docs
Loading...
Searching...
No Matches

#include <MRMesh/MRMatrix4.h>

Public Types

using ValueType = T
using VectorType = Vector4<T>

Public Member Functions

constexpr Matrix4 () noexcept
constexpr Matrix4 (const Vector4< T > &x, const Vector4< T > &y, const Vector4< T > &z, const Vector4< T > &w)
 initializes matrix from 4 row-vectors
constexpr Matrix4 (const Matrix3< T > &r, const Vector3< T > &t)
 construct from rotation matrix and translation vector
template<MR_SAME_TYPE_TEMPLATE_PARAM(T, TT)>
constexpr Matrix4 (const AffineXf3< TT > &xf) MR_REQUIRES_IF_SUPPORTED(std
template<typename U>
 MR_REQUIRES_IF_SUPPORTED (!std::is_same_v< T, U >) const expr explicit Matrix4(const Matrix4< U > &m)
constexpr const T & operator() (int row, int col) const noexcept
 element access
constexpr T & operator() (int row, int col) noexcept
constexpr const Vector4< T > & operator[] (int row) const noexcept
 row access
constexpr Vector4< T > & operator[] (int row) noexcept
constexpr Vector4< 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
Matrix3< T > submatrix3 (int i, int j) const noexcept
 computes submatrix of the matrix with excluded i-th row and j-th column
det () const noexcept
 computes determinant of the matrix
constexpr Matrix4< T > inverse() const noexcept MR_REQUIRES_IF_SUPPORTED(!std constexpr Matrix4< T > transposed () const noexcept
 computes inverse matrix
constexpr Matrix3< T > getRotation () const noexcept
void setRotation (const Matrix3< T > &rot) noexcept
constexpr Vector3< T > getTranslation () const noexcept
void setTranslation (const Vector3< T > &t) noexcept
constexpr T * data ()
constexpr const T * data () const
template<MR_SAME_TYPE_TEMPLATE_PARAM(T, TT)>
 operator AffineXf3< TT > () const MR_REQUIRES_IF_SUPPORTED(std

Static Public Member Functions

static constexpr Matrix4 zero () noexcept
static constexpr Matrix4 identity () noexcept
static constexpr Matrix4 scale (T s) noexcept
 returns a matrix that scales uniformly

Public Attributes

Vector4< T > x { 1, 0, 0, 0 }
 rows, identity matrix by default
Vector4< T > y { 0, 1, 0, 0 }
Vector4< T > z { 0, 0, 1, 0 }
Vector4< T > w { 0, 0, 0, 1 }

Friends

Vector3< T > operator()(const Vector3< T > &b) const MR_REQUIRES_IF_SUPPORTED(!std friend constexpr bool operator== (const Matrix4< T > &a, const Matrix4< T > &b)
constexpr bool operator!= (const Matrix4< T > &a, const Matrix4< T > &b)
constexpr auto operator+ (const Matrix4< T > &a, const Matrix4< T > &b) -> Matrix4< 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 Matrix4< T > &a, const Matrix4< T > &b) -> Matrix4< decltype(std::declval< T >() - std::declval< T >())>
constexpr auto operator* (T a, const Matrix4< T > &b) -> Matrix4< decltype(std::declval< T >() *std::declval< T >())>
constexpr auto operator* (const Matrix4< T > &b, T a) -> Matrix4< decltype(std::declval< T >() *std::declval< T >())>
constexpr auto operator/ (Matrix4< T > b, T a) -> Matrix4< decltype(std::declval< T >()/std::declval< T >())>
constexpr Matrix4< T > & operator+= (Matrix4< T > &a, const Matrix4< T > &b)
constexpr Matrix4< T > & operator-= (Matrix4< T > &a, const Matrix4< T > &b)
constexpr Matrix4< T > & operator*= (Matrix4< T > &a, T b)
constexpr Matrix4< T > & operator/= (Matrix4< T > &a, T b)
constexpr auto operator* (const Matrix4< T > &a, const Vector4< T > &b) -> Vector4< decltype(dot(std::declval< Vector4< T > >(), std::declval< Vector4< T > >()))>
 x = a * b
constexpr auto operator* (const Matrix4< T > &a, const Matrix4< T > &b) -> Matrix4< decltype(dot(std::declval< Vector4< T > >(), std::declval< Vector4< T > >()))>
 product of two matrices
std::ostream & operator<< (std::ostream &s, const Matrix4 &mat)
std::istream & operator>> (std::istream &s, Matrix4 &mat)

(Note that these are not member symbols.)

template<typename T>
auto dot (const Matrix4< T > &a, const Matrix4< T > &b) -> decltype(dot(a.x, b.x))
 double-dot product: x = a : b
template<typename T>
Matrix4< T > outer (const Vector4< T > &a, const Vector4< T > &b)
 x = a * b^T

Detailed Description

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

arbitrary 4x4 matrix


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