11#pragma warning(disable: 4804)
12#pragma warning(disable: 4146)
40 static constexpr Matrix2 scale( T sx, T sy )
noexcept {
return Matrix2( { sx, T(0) }, { T(0), sy } ); }
60 constexpr T
trace() const noexcept {
return x.x +
y.y; }
62 constexpr T
normSq() const noexcept {
return x.lengthSq() +
y.lengthSq(); }
63 constexpr auto norm() const noexcept
71 constexpr T
det() const noexcept;
77 [[nodiscard]] friend constexpr
bool operator ==( const
Matrix2<T> & a, const
Matrix2<T> & b ) {
return a.
x == b.x && a.y == b.y; }
88 if constexpr ( std::is_integral_v<T> )
89 return { b.x / a, b.y / a };
99 if constexpr ( std::is_integral_v<T> )
100 { a.
x /= b; a.
y /= b;
return a; }
102 return a *= ( 1 / b );
108 return {
dot( a.x, b ),
dot( a.y, b ) };
115 for (
int i = 0; i < 2; ++i )
116 for (
int j = 0; j < 2; ++j )
117 res[i][j] =
dot( a[i], b.col(j) );
129 return dot( a.x, b.x ) + dot( a.y, b.y );
136 return { a.
x * b, a.
y * b };
151constexpr Matrix2<T> Matrix2<T>::rotation(
const Vector2<T> & from,
const Vector2<T> & to )
noexcept MR_REQUIRES_IF_SUPPORTED( std::is_floating_point_v<T> )
153 const auto x =
cross( from, to );
155 return rotation(
angle( from, to ) );
157 return rotation( -
angle( from, to ) );
158 if (
dot( from, to ) >= 0 )
160 return rotation( T( PI ) );
166 return x.x * y.y - x.y * y.x;
172 auto det = this->det();
#define MR_REQUIRES_IF_SUPPORTED(...)
Definition MRMacros.h:34
Definition MRCameraOrientationPlugin.h:8
Vector3f cross(Vector3f a, Vector3f b)
int dot(Vector4b a, Vector4b b)
Definition MRMatrix2.h:19
constexpr Matrix2(const Matrix2< U > &m)
Definition MRMatrix2.h:34
Vector2< T > x
rows, identity matrix by default
Definition MRMatrix2.h:24
constexpr Matrix2() noexcept
Definition MRMatrix2.h:27
static constexpr Matrix2 scale(T s) noexcept
returns a matrix that scales uniformly
Definition MRMatrix2.h:38
constexpr T normSq() const noexcept
compute sum of squared matrix elements
Definition MRMatrix2.h:62
Matrix2< T > outer(const Vector2< T > &a, const Vector2< T > &b)
x = a * b^T
Definition MRMatrix2.h:134
auto dot(const Matrix2< T > &a, const Matrix2< T > &b) -> decltype(dot(a.x, b.x))
double-dot product: x = a : b
Definition MRMatrix2.h:127
static constexpr Matrix2 static rotation(T angle) noexcept MR_REQUIRES_IF_SUPPORTED(std constexpr Matrix2 static rotation(const Vector2< T > &from, const Vector2< T > &to) noexcept MR_REQUIRES_IF_SUPPORTED(std constexpr Matrix fromRows)(const Vector2< T > &x, const Vector2< T > &y) noexcept
creates matrix representing rotation around origin on given angle
Definition MRMatrix2.h:47
friend constexpr auto operator/(Matrix2< T > b, T a) -> Matrix2< decltype(std::declval< T >()/std::declval< T >())>
Definition MRMatrix2.h:86
friend constexpr auto operator-(const Matrix2< T > &a, const Matrix2< T > &b) -> Matrix2< decltype(std::declval< T >() - std::declval< T >())>
Definition MRMatrix2.h:83
constexpr Matrix2(const Vector2< T > &x, const Vector2< T > &y)
initializes matrix from its 2 rows
Definition MRMatrix2.h:32
friend constexpr Matrix2< T > & operator-=(Matrix2< T > &a, const Matrix2< T > &b)
Definition MRMatrix2.h:95
friend constexpr Matrix2< T > & operator*=(Matrix2< T > &a, T b)
Definition MRMatrix2.h:96
constexpr Vector2< T > col(int i) const noexcept
column access
Definition MRMatrix2.h:57
static constexpr Matrix2 identity() noexcept
Definition MRMatrix2.h:36
Vector2< T > y
Definition MRMatrix2.h:25
T ValueType
Definition MRMatrix2.h:20
constexpr T det() const noexcept
computes determinant of the matrix
friend constexpr auto operator*(T a, const Matrix2< T > &b) -> Matrix2< decltype(std::declval< T >() *std::declval< T >())>
Definition MRMatrix2.h:84
static constexpr Matrix2 scale(const Vector2< T > &s) noexcept
Definition MRMatrix2.h:41
friend constexpr Matrix2< T > & operator+=(Matrix2< T > &a, const Matrix2< T > &b)
Definition MRMatrix2.h:94
static constexpr Matrix2 scale(T sx, T sy) noexcept
returns a matrix that has its own scale along each axis
Definition MRMatrix2.h:40
constexpr T trace() const noexcept
computes trace of the matrix
Definition MRMatrix2.h:60
constexpr const Vector2< T > & operator[](int row) const noexcept
row access
Definition MRMatrix2.h:53
friend constexpr bool operator!=(const Matrix2< T > &a, const Matrix2< T > &b)
Definition MRMatrix2.h:78
constexpr Matrix2< T > inverse() const noexcept MR_REQUIRES_IF_SUPPORTED(std constexpr Matrix2< T > transposed() const noexcept
computes inverse matrix
friend constexpr Matrix2< T > & operator/=(Matrix2< T > &a, T b)
Definition MRMatrix2.h:97
constexpr auto norm() const noexcept
Definition MRMatrix2.h:63
static constexpr Matrix2 zero() noexcept
Definition MRMatrix2.h:35
friend constexpr auto operator+(const Matrix2< T > &a, const Matrix2< T > &b) -> Matrix2< decltype(std::declval< T >()+std::declval< T >())>
Definition MRMatrix2.h:82
static constexpr Matrix2 fromColumns(const Vector2< T > &x, const Vector2< T > &y) noexcept
Definition MRMatrix2.h:50
Definition MRVector2.h:28
T x
Definition MRVector2.h:34
T y
Definition MRVector2.h:34