From 6da6944fa3b724decc97c8b0f2005e40830facfb Mon Sep 17 00:00:00 2001 From: numzero Date: Sun, 17 Nov 2024 01:02:31 +0300 Subject: [PATCH] Fix a precision issue --- src/shape/cylinder.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) 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(),