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