matrices: implement Matrix4x4::scaling
This commit is contained in:
parent
117d7185e4
commit
f792d1a626
@ -249,6 +249,40 @@ impl Matrix4x4 {
|
||||
)
|
||||
}
|
||||
|
||||
/// Creates a 4x4 matrix representing a scaling of x,y,z.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use rtchallenge::{matrices::Matrix4x4, tuples::Tuple};
|
||||
///
|
||||
/// // A scaling matrix applied to a point.
|
||||
/// let transform = Matrix4x4::scaling(2., 3., 4.);
|
||||
/// let p = Tuple::point(-4., 6., 8.);
|
||||
/// assert_eq!(transform * p, Tuple::point(-8., 18., 32.));
|
||||
///
|
||||
/// // A scaling matrix applied to a vector.
|
||||
/// let v = Tuple::vector(-4., 6., 8.);
|
||||
/// assert_eq!(transform * v, Tuple::vector(-8., 18., 32.));
|
||||
///
|
||||
/// // Multiplying by the inverse of a scaling matrix.
|
||||
/// let inv = transform.inverse();
|
||||
/// assert_eq!(inv * v, Tuple::vector(-2., 2., 2.));
|
||||
///
|
||||
/// // Reflection is scaling by a negative value.
|
||||
/// let transform = Matrix4x4::scaling(-1., 1., 1.);
|
||||
/// let p = Tuple::point(2., 3., 4.);
|
||||
/// assert_eq!(transform * p, Tuple::point(-2., 3., 4.));
|
||||
/// ```
|
||||
pub fn scaling(x: f32, y: f32, z: f32) -> Matrix4x4 {
|
||||
Matrix4x4::new(
|
||||
[x, 0., 0., 0.],
|
||||
[0., y, 0., 0.],
|
||||
[0., 0., z, 0.],
|
||||
[0., 0., 0., 1.],
|
||||
)
|
||||
}
|
||||
|
||||
/// Transpose self, returning a new matrix that has been reflected across the diagonal.
|
||||
/// # Examples
|
||||
///
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user