diff --git a/rtchallenge/src/tuples.rs b/rtchallenge/src/tuples.rs index ecd9848..1cf5f8a 100644 --- a/rtchallenge/src/tuples.rs +++ b/rtchallenge/src/tuples.rs @@ -3,27 +3,11 @@ use std::ops::{Add, Div, Mul, Neg, Sub}; use crate::{Float, EPSILON}; /// Short hand for creating a Tuple that represents a point, w=1. -/// -/// # Examples -/// ``` -/// use rtchallenge::tuples::{point, Tuple}; -/// -/// assert_eq!(point(1., 2., 3.), Tuple::point(1., 2., 3.)); -/// assert_eq!(point(1., 2., 3.), Tuple::new(1., 2., 3., 1.)); -/// ``` pub fn point(x: Float, y: Float, z: Float) -> Tuple { Tuple::point(x, y, z) } /// Short hand for creating a Tuple that represents a vector, w=0. -/// -/// # Examples -/// ``` -/// use rtchallenge::tuples::{vector, Tuple}; -/// -/// assert_eq!(vector(1., 2., 3.), Tuple::vector(1., 2., 3.)); -/// assert_eq!(vector(1., 2., 3.), Tuple::new(1., 2., 3., 0.)); -/// ``` pub fn vector(x: Float, y: Float, z: Float) -> Tuple { Tuple::vector(x, y, z) } @@ -73,26 +57,6 @@ impl Tuple { } /// Reflects vector v across normal n. -/// -/// # Examples -/// ``` -/// use rtchallenge::{ -/// tuples::{reflect, Tuple}, -/// Float, -/// }; -/// -/// // Reflecting a vector approaching at 45° -/// let v = Tuple::vector(1., -1., 0.); -/// let n = Tuple::vector(0., 1., 0.); -/// let r = reflect(v, n); -/// assert_eq!(r, Tuple::vector(1., 1., 0.)); -/// -/// // Reflecting off a slanted surface. -/// let v = Tuple::vector(0., -1., 0.); -/// let n = Tuple::vector((2. as Float).sqrt() / 2., (2. as Float).sqrt() / 2., 0.); -/// let r = reflect(v, n); -/// assert_eq!(r, Tuple::vector(1., 0., 0.)); -/// ``` pub fn reflect(v: Tuple, n: Tuple) -> Tuple { v - n * 2. * dot(v, n) } @@ -297,7 +261,7 @@ impl Sub for Color { #[cfg(test)] mod tests { - use super::{cross, dot, Color, Float, Tuple, EPSILON}; + use super::{cross, dot, reflect, Color, Float, Tuple, EPSILON}; #[test] fn is_point() { // A tuple with w = 1 is a point @@ -456,4 +420,20 @@ mod tests { let c2 = Color::new(0.9, 1., 0.1); assert_eq!(c1 * c2, Color::new(1.0 * 0.9, 0.2 * 1., 0.4 * 0.1)); } + #[test] + fn reflect_approaching_at_45() { + // Reflecting a vector approaching at 45° + let v = Tuple::vector(1., -1., 0.); + let n = Tuple::vector(0., 1., 0.); + let r = reflect(v, n); + assert_eq!(r, Tuple::vector(1., 1., 0.)); + } + #[test] + fn reflect_slanted_surface() { + // Reflecting off a slanted surface. + let v = Tuple::vector(0., -1., 0.); + let n = Tuple::vector((2. as Float).sqrt() / 2., (2. as Float).sqrt() / 2., 0.); + let r = reflect(v, n); + assert_eq!(r, Tuple::vector(1., 0., 0.)); + } }