From e7f926ac1eb05d520ad0d82710287f817bf1c8fe Mon Sep 17 00:00:00 2001 From: Jon Janzen Date: Mon, 21 Mar 2022 15:25:56 -0600 Subject: [PATCH] Added position --- features/src/ray.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/features/src/ray.rs b/features/src/ray.rs index 87aa2ef..e75fb16 100644 --- a/features/src/ray.rs +++ b/features/src/ray.rs @@ -1,3 +1,6 @@ +use crate::num_traits_cast; +use num_traits::NumCast; + use crate::structs::Tuple; #[derive(Debug, PartialEq)] @@ -17,6 +20,10 @@ impl Ray { }) } } + + fn position(&self, time: X) -> Tuple { + self.origin + self.direction * num_traits_cast!(time) + } } @@ -49,4 +56,15 @@ mod tests { assert_eq!(ray, None); } + #[test] + pub fn create_and_query_ray() { + let origin = Tuple::point(2, 3, 4); + let direction = Tuple::vector(1, 0, 0); + + let ray = Ray::new(origin, direction).unwrap(); + assert_eq!(Tuple::point(2, 3, 4), ray.position(0)); + assert_eq!(Tuple::point(3, 3, 4), ray.position(1)); + assert_eq!(Tuple::point(1, 3, 4), ray.position(-1)); + assert_eq!(Tuple::point(4.5, 3, 4), ray.position(2.5)); + } }