Added position
This commit is contained in:
@@ -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<X: NumCast>(&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));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user