diff --git a/src/shape/cylinder.rs b/src/shape/cylinder.rs index 0f06a21..1c384b6 100644 --- a/src/shape/cylinder.rs +++ b/src/shape/cylinder.rs @@ -93,7 +93,7 @@ impl YCylinder { // 2. (ray.pos.x + t * ray.dir.x)² + (ray.pos.z + t * ray.dir.z)² = radius² let pos = ray.pos.xz(); let dir = ray.dir.xz(); - if dir.length_squared() < 1e-3 { + if dir.length_squared() < 1e-6 * ray.dir.length_squared() { if pos.length_squared() >= self.radius.powi(2) { return None; } @@ -215,6 +215,14 @@ mod tests { r.trace_into(ray(vec3(1.4142135, -3., 1.4142135), vec3(-1., 1., -1.))), Some(0.) ); + assert_eq!( + YCylinder { + half_length: 300., + radius: 50. + } + .trace_into(ray(vec3(-125., 375., 0.), vec3(3., -11., 0.) / 1024.)), + Some(25600.) + ); assert_abs_diff_eq!( r.trace_out_of(ray(vec3(0., 0., 0.), vec3(1., 1., 1.))).unwrap(),