template<class T>
Matrix3 class
2D transformation matrix
Template parameters | |
---|---|
T | Underlying data type |
Contents
See Operations with matrices and vectors and 2D and 3D transformations for brief introduction.
Base classes
-
template<std::class Matrix
size_t size, class T> - Square matrix.
Public static functions
- static auto translation(const Vector2<T>& vector) -> Matrix3<T> constexpr
- 2D translation matrix
- static auto scaling(const Vector2<T>& vector) -> Matrix3<T> constexpr
- 2D scaling matrix
- static auto rotation(Rad<T> angle) -> Matrix3<T>
- 2D rotation matrix
- static auto reflection(const Vector2<T>& normal) -> Matrix3<T>
- 2D reflection matrix
- static auto shearingX(T amount) -> Matrix3<T> constexpr
- 2D shearing matrix along X axis
- static auto shearingY(T amount) -> Matrix3<T> constexpr
- 2D shearing matrix along Y axis
- static auto projection(const Vector2<T>& size) -> Matrix3<T>
- 2D projection matrix
- static auto from(const Matrix2x2<T>& rotationScaling, const Vector2<T>& translation) -> Matrix3<T> constexpr
- Create matrix from rotation/scaling part and translation part.
Constructors, destructors, conversion operators
- Matrix3(IdentityInitT = IdentityInit, T value = T{1}) constexpr noexcept
- Default constructor.
- Matrix3(ZeroInitT) explicit constexpr noexcept
- Construct zero-filled matrix.
- Matrix3(NoInitT) explicit constexpr noexcept
- Construct matrix without initializing the contents.
- Matrix3(const Vector3<T>& first, const Vector3<T>& second, const Vector3<T>& third) constexpr noexcept
- Construct matrix from column vectors.
- Matrix3(T value) explicit constexpr noexcept
- Construct matrix with one value for all elements.
-
template<class U>Matrix3(const RectangularMatrix<3, 3, U>& other) explicit constexpr noexcept
- Construct matrix from another of different type.
-
template<class U, class V = decltype(Implementation::RectangularMatrixConverter<3, 3, T, U>::from(std::Matrix3(const U& other) explicit constexpr noexcept
declval<U>()))> - Construct matrix from external representation.
- Matrix3(const RectangularMatrix<3, 3, T>& other) constexpr noexcept
- Copy constructor.
Public functions
- auto isRigidTransformation() const -> bool
- Check whether the matrix represents rigid transformation.
- auto rotationScaling() const -> Matrix2x2<T> constexpr
- 2D rotation and scaling part of the matrix
- auto rotationNormalized() const -> Matrix2x2<T>
- 2D rotation part of the matrix assuming there is no scaling
- auto rotation() const -> Matrix2x2<T>
- 2D rotation part of the matrix
- auto uniformScalingSquared() const -> T
- Uniform scaling part of the matrix, squared.
- auto uniformScaling() const -> T
- Uniform scaling part of the matrix.
- auto right() -> Vector2<T>&
- Right-pointing 2D vector.
- auto right() const -> Vector2<T> constexpr
- auto up() -> Vector2<T>&
- Up-pointing 2D vector.
- auto up() const -> Vector2<T> constexpr
- auto translation() -> Vector2<T>&
- 2D translation part of the matrix
- auto translation() const -> Vector2<T> constexpr
- auto invertedRigid() const -> Matrix3<T>
- Inverted rigid transformation matrix.
- auto transformVector(const Vector2<T>& vector) const -> Vector2<T>
- Transform 2D vector with the matrix.
- auto transformPoint(const Vector2<T>& vector) const -> Vector2<T>
- Transform 2D point with the matrix.
Function documentation
template<class T>
static Matrix3<T> Magnum:: Math:: Matrix3<T>:: translation(const Vector2<T>& vector) constexpr
2D translation matrix
Parameters | |
---|---|
vector | Translation vector |
template<class T>
static Matrix3<T> Magnum:: Math:: Matrix3<T>:: reflection(const Vector2<T>& normal)
2D reflection matrix
Parameters | |
---|---|
normal | Normal of the line through which to reflect |
Expects that the normal is normalized. Reflection along axes can be done in a slightly simpler way also using scaling(), e.g. Matrix3::reflection(Vector2::yAxis())
is equivalent to Matrix3::scaling(Vector2::yScale(-1.0f))
.
template<class T>
static Matrix3<T> Magnum:: Math:: Matrix3<T>:: projection(const Vector2<T>& size)
2D projection matrix
Parameters | |
---|---|
size | Size of the view |
template<class T>
static Matrix3<T> Magnum:: Math:: Matrix3<T>:: from(const Matrix2x2<T>& rotationScaling,
const Vector2<T>& translation) constexpr
Create matrix from rotation/scaling part and translation part.
Parameters | |
---|---|
rotationScaling | Rotation/scaling part (upper-left 2x2 matrix) |
translation | Translation part (first two elements of third column) |
template<class T>
Magnum:: Math:: Matrix3<T>:: Matrix3(IdentityInitT = IdentityInit,
T value = T{1}) constexpr noexcept
Default constructor.
Creates identity matrix. value
allows you to specify value on diagonal.
template<class T>
template<class U>
Magnum:: Math:: Matrix3<T>:: Matrix3(const RectangularMatrix<3, 3, U>& other) explicit constexpr noexcept
Construct matrix from another of different type.
Performs only default casting on the values, no rounding or anything else. Example usage:
Matrix2x2<Float> floatingPoint({1.3f, 2.7f}, {-15.0f, 7.0f}); Matrix2x2<Byte> integral(floatingPoint); // integral == {{1, 2}, {-15, 7}}
template<class T>
bool Magnum:: Math:: Matrix3<T>:: isRigidTransformation() const
Check whether the matrix represents rigid transformation.
Rigid transformation consists only of rotation and translation (i.e. no scaling or projection).
template<class T>
Matrix2x2<T> Magnum:: Math:: Matrix3<T>:: rotationScaling() const constexpr
2D rotation and scaling part of the matrix
Upper-left 2x2 part of the matrix.
template<class T>
Matrix2x2<T> Magnum:: Math:: Matrix3<T>:: rotationNormalized() const
2D rotation part of the matrix assuming there is no scaling
Similar to rotationScaling(), but additionally checks that the base vectors are normalized.
template<class T>
T Magnum:: Math:: Matrix3<T>:: uniformScalingSquared() const
Uniform scaling part of the matrix, squared.
Squared length of vectors in upper-left 2x2 part of the matrix. Expects that the scaling is the same in all axes. Faster alternative to uniformScaling(), because it doesn't compute the square root.
template<class T>
T Magnum:: Math:: Matrix3<T>:: uniformScaling() const
Uniform scaling part of the matrix.
Length of vectors in upper-left 2x2 part of the matrix. Expects that the scaling is the same in all axes. Use faster alternative uniformScalingSquared() where possible.
template<class T>
Vector2<T>& Magnum:: Math:: Matrix3<T>:: translation()
2D translation part of the matrix
First two elements of third column.
template<class T>
Vector2<T> Magnum:: Math:: Matrix3<T>:: translation() const constexpr
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
template<class T>
Matrix3<T> Magnum:: Math:: Matrix3<T>:: invertedRigid() const
Inverted rigid transformation matrix.
Expects that the matrix represents rigid transformation. Significantly faster than the general algorithm in inverted().
is matrix without i-th row and j-th column, see ij()
template<class T>
Vector2<T> Magnum:: Math:: Matrix3<T>:: transformVector(const Vector2<T>& vector) const
Transform 2D vector with the matrix.
Unlike in transformPoint(), translation is not involved in the transformation.
template<class T>
Vector2<T> Magnum:: Math:: Matrix3<T>:: transformPoint(const Vector2<T>& vector) const
Transform 2D point with the matrix.
Unlike in transformVector(), translation is also involved in the transformation.