diff options
| author | nsfisis <nsfisis@gmail.com> | 2022-11-27 12:24:39 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2022-11-27 12:24:39 +0900 |
| commit | b054c94fa5479141cb18fd5436f1432343f4187b (patch) | |
| tree | 1ec95e21399deca7c828565d1d86c0783b7ce165 /src | |
| parent | 04d3a2d673593c5a36f40894fb29d090a7d7a197 (diff) | |
| download | RayTracingInOneWeekend.zig-b054c94fa5479141cb18fd5436f1432343f4187b.tar.gz RayTracingInOneWeekend.zig-b054c94fa5479141cb18fd5436f1432343f4187b.tar.zst RayTracingInOneWeekend.zig-b054c94fa5479141cb18fd5436f1432343f4187b.zip | |
6.2
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.zig | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/main.zig b/src/main.zig index a60526a..88df76a 100644 --- a/src/main.zig +++ b/src/main.zig @@ -86,16 +86,16 @@ const Ray = struct { fn hitSphere(center: Point3, radius: f64, r: Ray) f64 { const oc = r.origin.sub(center); - const a = Vec3.dot(r.dir, r.dir); - const b = 2.0 * Vec3.dot(oc, r.dir); - const c = Vec3.dot(oc, oc) - radius * radius; - const discriminant = b * b - 4.0 * a * c; + const a = r.dir.normSquared(); + const half_b = Vec3.dot(oc, r.dir); + const c = oc.normSquared() - radius * radius; + const discriminant = half_b * half_b - a * c; if (discriminant < 0.0) { // r does not intersect the sphere. return -1.0; } else { // root of the equation. - return (-b - @sqrt(discriminant)) / (2.0 * a); + return (-half_b - @sqrt(discriminant)) / a; } } |
