#[repr(C)]pub struct Transform2<T> {
pub a11: T,
pub a12: T,
pub a13: T,
pub a21: T,
pub a22: T,
pub a23: T,
}
Expand description
2D affine transformation matrix.
Each field aij represents the i-th row and j-th column of the matrix.
The third row is implied to be [0, 0, 1]
and is omitted.
Row-major storage with column-major semantics.
Stored in row-major order (fields appear in reading order),
but interpreted as column-major: each column is a transformed basis vector,
and matrices are applied to column vectors via mat * vec
.
Fields§
§a11: T
§a12: T
§a13: T
§a21: T
§a22: T
§a23: T
Implementations§
Source§impl<T> Transform2<T>
impl<T> Transform2<T>
Sourcepub const fn new(
a11: T,
a12: T,
a13: T,
a21: T,
a22: T,
a23: T,
) -> Transform2<T>
pub const fn new( a11: T, a12: T, a13: T, a21: T, a22: T, a23: T, ) -> Transform2<T>
Constructs a new matrix from components.
Source§impl<T: Zero> Transform2<T>
impl<T: Zero> Transform2<T>
Sourcepub const ZERO: Transform2<T>
pub const ZERO: Transform2<T>
Zero matrix.
Source§impl<T: Zero + One> Transform2<T>
impl<T: Zero + One> Transform2<T>
Sourcepub const IDENTITY: Transform2<T>
pub const IDENTITY: Transform2<T>
Identity matrix.
Source§impl<T: Float> Transform2<T>
impl<T: Float> Transform2<T>
Sourcepub fn translate(trans: Vec2<T>) -> Transform2<T>
pub fn translate(trans: Vec2<T>) -> Transform2<T>
Translation matrix.
Sourcepub fn scale(scale: Vec2<T>) -> Transform2<T>
pub fn scale(scale: Vec2<T>) -> Transform2<T>
Scaling matrix.
Scales around the origin.
Sourcepub fn rotate(angle: Angle<T>) -> Transform2<T>
pub fn rotate(angle: Angle<T>) -> Transform2<T>
Rotation matrix.
Rotates around the origin.
Sourcepub fn skew(skew: Vec2<T>) -> Transform2<T>
pub fn skew(skew: Vec2<T>) -> Transform2<T>
Skewing matrix.
Sourcepub fn reflect(line: Vec2<T>) -> Transform2<T>
pub fn reflect(line: Vec2<T>) -> Transform2<T>
Reflection matrix.
Reflects around the given axis. If axis is the zero vector, returns a point reflection around the origin.
Sourcepub fn project(line: Vec2<T>) -> Transform2<T>
pub fn project(line: Vec2<T>) -> Transform2<T>
Projection matrix.
Projects onto the given axis. If axis is the zero vector, returns the zero matrix.
Sourcepub fn fit(source: Bounds2<T>, target: Bounds2<T>) -> Transform2<T>
pub fn fit(source: Bounds2<T>, target: Bounds2<T>) -> Transform2<T>
Fit matrix.
Fits coordinates from a source rect into a target rect.
Sourcepub fn ortho(rect: Bounds2<T>) -> Transform2<T>
pub fn ortho(rect: Bounds2<T>) -> Transform2<T>
Orthographic matrix.
Fits the coordinates from a rectangle to x = [-1, 1]
and y = [1, -1]
.
Source§impl<T> Transform2<T>
impl<T> Transform2<T>
Sourcepub fn from_row_major(mat: [[T; 3]; 2]) -> Transform2<T>
pub fn from_row_major(mat: [[T; 3]; 2]) -> Transform2<T>
Imports the matrix from a row-major layout.
Sourcepub fn from_column_major(mat: [[T; 2]; 3]) -> Transform2<T>
pub fn from_column_major(mat: [[T; 2]; 3]) -> Transform2<T>
Imports the matrix from a column-major layout.
Sourcepub fn into_row_major(self) -> [[T; 3]; 2]
pub fn into_row_major(self) -> [[T; 3]; 2]
Exports the matrix as a row-major array.
Sourcepub fn into_column_major(self) -> [[T; 2]; 3]
pub fn into_column_major(self) -> [[T; 2]; 3]
Exports the matrix as a column-major array.
Source§impl<T> Transform2<T>
impl<T> Transform2<T>
Source§impl<T: Scalar> Transform2<T>
impl<T: Scalar> Transform2<T>
Sourcepub fn flat_norm_sqr(self) -> T
pub fn flat_norm_sqr(self) -> T
Computes the squared Frobenius norm (sum of squares of all matrix elements).
This measure is useful for quickly checking matrix magnitude or comparing matrices without the cost of a square root operation.
To check if a matrix is effectively zero, test if flat_norm_sqr()
is below a small epsilon threshold.
pub fn try_invert(self) -> Option<Transform2<T>>where
T: Float,
Sourcepub fn inverse(self) -> Transform2<T>where
T: Float,
pub fn inverse(self) -> Transform2<T>where
T: Float,
Computes the inverse matrix.
Returns the zero matrix if the determinant is near zero.
Sourcepub fn lerp(self, other: Transform2<T>, t: T) -> Transform2<T>where
T: Float,
pub fn lerp(self, other: Transform2<T>, t: T) -> Transform2<T>where
T: Float,
Linear interpolation between the matrix elements.
Trait Implementations§
Source§impl<T: Clone> Clone for Transform2<T>
impl<T: Clone> Clone for Transform2<T>
Source§fn clone(&self) -> Transform2<T>
fn clone(&self) -> Transform2<T>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl<T: Debug> Debug for Transform2<T>
impl<T: Debug> Debug for Transform2<T>
Source§impl<T: Default> Default for Transform2<T>
impl<T: Default> Default for Transform2<T>
Source§fn default() -> Transform2<T>
fn default() -> Transform2<T>
Source§impl<T: Display> Display for Transform2<T>
impl<T: Display> Display for Transform2<T>
Source§impl<T: Zero + One> From<Transform2<T>> for Mat3<T>
impl<T: Zero + One> From<Transform2<T>> for Mat3<T>
Source§fn from(mat: Transform2<T>) -> Mat3<T>
fn from(mat: Transform2<T>) -> Mat3<T>
Source§impl<T> Mul<&T> for &Transform2<T>
impl<T> Mul<&T> for &Transform2<T>
Source§type Output = Transform2<T>
type Output = Transform2<T>
*
operator.Source§impl<T> Mul<&T> for Transform2<T>
impl<T> Mul<&T> for Transform2<T>
Source§type Output = Transform2<T>
type Output = Transform2<T>
*
operator.Source§impl<T> Mul<&Transform2<T>> for &Transform2<T>
impl<T> Mul<&Transform2<T>> for &Transform2<T>
Source§type Output = Transform2<T>
type Output = Transform2<T>
*
operator.Source§fn mul(self, rhs: &Transform2<T>) -> Transform2<T>
fn mul(self, rhs: &Transform2<T>) -> Transform2<T>
*
operation. Read moreSource§impl<T> Mul<&Transform2<T>> for Transform2<T>
impl<T> Mul<&Transform2<T>> for Transform2<T>
Source§type Output = Transform2<T>
type Output = Transform2<T>
*
operator.Source§fn mul(self, rhs: &Transform2<T>) -> Transform2<T>
fn mul(self, rhs: &Transform2<T>) -> Transform2<T>
*
operation. Read moreSource§impl<T> Mul<&Vec2<T>> for &Transform2<T>
impl<T> Mul<&Vec2<T>> for &Transform2<T>
Source§impl<T> Mul<&Vec2<T>> for Transform2<T>
impl<T> Mul<&Vec2<T>> for Transform2<T>
Source§impl<T> Mul<&Vec3<T>> for &Transform2<T>
impl<T> Mul<&Vec3<T>> for &Transform2<T>
Source§impl<T> Mul<&Vec3<T>> for Transform2<T>
impl<T> Mul<&Vec3<T>> for Transform2<T>
Source§impl<T: Copy + Add<Output = T> + Mul<Output = T>> Mul<Mat2<T>> for Transform2<T>
impl<T: Copy + Add<Output = T> + Mul<Output = T>> Mul<Mat2<T>> for Transform2<T>
Source§type Output = Transform2<T>
type Output = Transform2<T>
*
operator.Source§impl<T: Float> Mul<Ray2<T>> for Transform2<T>
impl<T: Float> Mul<Ray2<T>> for Transform2<T>
Source§impl<T> Mul<T> for &Transform2<T>
impl<T> Mul<T> for &Transform2<T>
Source§type Output = Transform2<T>
type Output = Transform2<T>
*
operator.Source§fn mul(self, rhs: T) -> Transform2<T>
fn mul(self, rhs: T) -> Transform2<T>
*
operation. Read moreSource§impl<T> Mul<Transform2<T>> for &Transform2<T>
impl<T> Mul<Transform2<T>> for &Transform2<T>
Source§type Output = Transform2<T>
type Output = Transform2<T>
*
operator.Source§fn mul(self, rhs: Transform2<T>) -> Transform2<T>
fn mul(self, rhs: Transform2<T>) -> Transform2<T>
*
operation. Read moreSource§impl<T: Copy + Add<Output = T> + Mul<Output = T>> Mul<Transform2<T>> for Mat2<T>
impl<T: Copy + Add<Output = T> + Mul<Output = T>> Mul<Transform2<T>> for Mat2<T>
Source§type Output = Transform2<T>
type Output = Transform2<T>
*
operator.Source§fn mul(self, rhs: Transform2<T>) -> Transform2<T>
fn mul(self, rhs: Transform2<T>) -> Transform2<T>
*
operation. Read moreSource§impl<T> Mul<Vec2<T>> for &Transform2<T>
impl<T> Mul<Vec2<T>> for &Transform2<T>
Source§impl<T> Mul<Vec3<T>> for &Transform2<T>
impl<T> Mul<Vec3<T>> for &Transform2<T>
Source§impl<T: Copy + Add<Output = T> + Mul<Output = T>> Mul for Transform2<T>
impl<T: Copy + Add<Output = T> + Mul<Output = T>> Mul for Transform2<T>
Source§type Output = Transform2<T>
type Output = Transform2<T>
*
operator.Source§fn mul(self, rhs: Transform2<T>) -> Transform2<T>
fn mul(self, rhs: Transform2<T>) -> Transform2<T>
*
operation. Read moreSource§impl<T> MulAssign<&T> for Transform2<T>
impl<T> MulAssign<&T> for Transform2<T>
Source§fn mul_assign(&mut self, rhs: &T)
fn mul_assign(&mut self, rhs: &T)
*=
operation. Read moreSource§impl<T> MulAssign<&Transform2<T>> for Transform2<T>
impl<T> MulAssign<&Transform2<T>> for Transform2<T>
Source§fn mul_assign(&mut self, rhs: &Transform2<T>)
fn mul_assign(&mut self, rhs: &Transform2<T>)
*=
operation. Read moreSource§impl<T: Copy + Add<Output = T> + Mul<Output = T>> MulAssign<Mat2<T>> for Transform2<T>
impl<T: Copy + Add<Output = T> + Mul<Output = T>> MulAssign<Mat2<T>> for Transform2<T>
Source§fn mul_assign(&mut self, rhs: Mat2<T>)
fn mul_assign(&mut self, rhs: Mat2<T>)
*=
operation. Read moreSource§impl<T: Copy + Add<Output = T> + Mul<Output = T>> MulAssign<Transform2<T>> for Mat3<T>
impl<T: Copy + Add<Output = T> + Mul<Output = T>> MulAssign<Transform2<T>> for Mat3<T>
Source§fn mul_assign(&mut self, rhs: Transform2<T>)
fn mul_assign(&mut self, rhs: Transform2<T>)
*=
operation. Read moreSource§impl<T: Copy + Add<Output = T> + Mul<Output = T>> MulAssign for Transform2<T>
impl<T: Copy + Add<Output = T> + Mul<Output = T>> MulAssign for Transform2<T>
Source§fn mul_assign(&mut self, rhs: Transform2<T>)
fn mul_assign(&mut self, rhs: Transform2<T>)
*=
operation. Read more