16#pragma warning(disable: 4804)
17#pragma warning(disable: 4146)
45 static constexpr Matrix2 scale( T sx, T sy )
noexcept {
return Matrix2( { sx, T(0) }, { T(0), sy } ); }
65 constexpr T
trace() const noexcept {
return x.x +
y.y; }
67 constexpr T
normSq() const noexcept {
return x.lengthSq() +
y.lengthSq(); }
68 constexpr auto norm() const noexcept
76 constexpr T
det() const noexcept;
82 [[nodiscard]] friend constexpr
bool operator ==( const
Matrix2<T> & a, const
Matrix2<T> & b ) {
return a.
x == b.x && a.y == b.y; }
93 if constexpr ( std::is_integral_v<T> )
94 return { b.x / a, b.y / a };
104 if constexpr ( std::is_integral_v<T> )
105 { a.
x /= b; a.
y /= b;
return a; }
107 return a *= ( 1 / b );
113 return {
dot( a.x, b ),
dot( a.y, b ) };
120 for (
int i = 0; i < 2; ++i )
121 for (
int j = 0; j < 2; ++j )
122 res[i][j] =
dot( a[i], b.col(j) );
128 return s << mat.
x <<
'\n' << mat.
y <<
'\n';
133 return s >> mat.
x >> mat.
y;
144 return dot( a.x, b.x ) + dot( a.y, b.y );
151 return { a.
x * b, a.
y * b };
166constexpr Matrix2<T> Matrix2<T>::rotation(
const Vector2<T> & from,
const Vector2<T> & to )
noexcept MR_REQUIRES_IF_SUPPORTED( std::is_floating_point_v<T> )
168 const auto x = cross( from, to );
170 return rotation(
angle( from, to ) );
172 return rotation( -
angle( from, to ) );
173 if (
dot( from, to ) >= 0 )
175 return rotation( T( PI ) );
181 return x.x * y.y - x.y * y.x;
187 auto det = this->det();
#define MR_REQUIRES_IF_SUPPORTED(...)
Definition MRMacros.h:34
constexpr Matrix2(const Matrix2< U > &m)
Definition MRMatrix2.h:39
Vector2< T > x
rows, identity matrix by default
Definition MRMatrix2.h:29
constexpr Matrix2() noexcept
Definition MRMatrix2.h:32
static constexpr Matrix2 scale(T s) noexcept
returns a matrix that scales uniformly
Definition MRMatrix2.h:43
constexpr T normSq() const noexcept
compute sum of squared matrix elements
Definition MRMatrix2.h:67
Matrix2< T > outer(const Vector2< T > &a, const Vector2< T > &b)
x = a * b^T
Definition MRMatrix2.h:149
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:142
friend std::ostream & operator<<(std::ostream &s, const Matrix2 &mat)
Definition MRMatrix2.h:126
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:52
friend constexpr auto operator/(Matrix2< T > b, T a) -> Matrix2< decltype(std::declval< T >()/std::declval< T >())>
Definition MRMatrix2.h:91
friend constexpr auto operator-(const Matrix2< T > &a, const Matrix2< T > &b) -> Matrix2< decltype(std::declval< T >() - std::declval< T >())>
Definition MRMatrix2.h:88
constexpr Matrix2(const Vector2< T > &x, const Vector2< T > &y)
initializes matrix from its 2 rows
Definition MRMatrix2.h:37
friend constexpr Matrix2< T > & operator-=(Matrix2< T > &a, const Matrix2< T > &b)
Definition MRMatrix2.h:100
friend constexpr Matrix2< T > & operator*=(Matrix2< T > &a, T b)
Definition MRMatrix2.h:101
constexpr Vector2< T > col(int i) const noexcept
column access
Definition MRMatrix2.h:62
static constexpr Matrix2 identity() noexcept
Definition MRMatrix2.h:41
Vector2< T > y
Definition MRMatrix2.h:30
T ValueType
Definition MRMatrix2.h:25
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:89
static constexpr Matrix2 scale(const Vector2< T > &s) noexcept
Definition MRMatrix2.h:46
friend constexpr Matrix2< T > & operator+=(Matrix2< T > &a, const Matrix2< T > &b)
Definition MRMatrix2.h:99
static constexpr Matrix2 scale(T sx, T sy) noexcept
returns a matrix that has its own scale along each axis
Definition MRMatrix2.h:45
friend std::istream & operator>>(std::istream &s, Matrix2 &mat)
Definition MRMatrix2.h:131
constexpr T trace() const noexcept
computes trace of the matrix
Definition MRMatrix2.h:65
constexpr const Vector2< T > & operator[](int row) const noexcept
row access
Definition MRMatrix2.h:58
friend constexpr bool operator!=(const Matrix2< T > &a, const Matrix2< T > &b)
Definition MRMatrix2.h:83
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:102
constexpr auto norm() const noexcept
Definition MRMatrix2.h:68
static constexpr Matrix2 zero() noexcept
Definition MRMatrix2.h:40
friend constexpr auto operator+(const Matrix2< T > &a, const Matrix2< T > &b) -> Matrix2< decltype(std::declval< T >()+std::declval< T >())>
NOTE: We use std::declval() in the operators below because libclang 18 in our binding generator is bu...
Definition MRMatrix2.h:87
static constexpr Matrix2 fromColumns(const Vector2< T > &x, const Vector2< T > &y) noexcept
Definition MRMatrix2.h:55
@ angle
Direction, normally Vector3f.
constexpr auto dot(A a, A b)
Definition MRImGuiVectorOperators.h:129
only for bindings generation
Definition MRCameraOrientationPlugin.h:8
Definition MRMatrix2.h:24
Definition MRVector2.h:29
T x
Definition MRVector2.h:35
T y
Definition MRVector2.h:35