Fix a precision issue
This commit is contained in:
parent
122085b9ee
commit
6da6944fa3
|
|
@ -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(),
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user