Added position

This commit is contained in:
Jon Janzen
2022-03-21 15:25:56 -06:00
parent cd297fd4a9
commit e7f926ac1e

View File

@@ -1,3 +1,6 @@
use crate::num_traits_cast;
use num_traits::NumCast;
use crate::structs::Tuple; use crate::structs::Tuple;
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]
@@ -17,6 +20,10 @@ impl Ray {
}) })
} }
} }
fn position<X: NumCast>(&self, time: X) -> Tuple {
self.origin + self.direction * num_traits_cast!(time)
}
} }
@@ -49,4 +56,15 @@ mod tests {
assert_eq!(ray, None); 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));
}
} }