From 117d7185e4f00d22c34c678a56eb389fa3643893 Mon Sep 17 00:00:00 2001 From: Bill Thiede Date: Mon, 5 Jul 2021 17:42:19 -0700 Subject: [PATCH] matrices: implement Matrix4x4::translate --- rtchallenge/src/matrices.rs | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/rtchallenge/src/matrices.rs b/rtchallenge/src/matrices.rs index e301e2a..f4cf7a4 100644 --- a/rtchallenge/src/matrices.rs +++ b/rtchallenge/src/matrices.rs @@ -223,6 +223,32 @@ impl Matrix4x4 { } } + /// Creates a 4x4 matrix representing a translation of x,y,z. + /// + /// # Examples + /// + /// ``` + /// use rtchallenge::{matrices::Matrix4x4, tuples::Tuple}; + /// + /// let transform = Matrix4x4::translate(5., -3., 2.); + /// let p = Tuple::point(-3., 4., 5.); + /// assert_eq!(transform * p, Tuple::point(2., 1., 7.)); + /// + /// let inv = transform.inverse(); + /// assert_eq!(inv * p, Tuple::point(-8., 7., 3.)); + /// + /// let v = Tuple::vector(-3., 4., 5.); + /// assert_eq!(transform * v, v); + /// ``` + pub fn translate(x: f32, y: f32, z: f32) -> Matrix4x4 { + Matrix4x4::new( + [1., 0., 0., x], + [0., 1., 0., y], + [0., 0., 1., z], + [0., 0., 0., 1.], + ) + } + /// Transpose self, returning a new matrix that has been reflected across the diagonal. /// # Examples ///