aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main.zig
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2022-11-27 12:24:39 +0900
committernsfisis <nsfisis@gmail.com>2022-11-27 12:24:39 +0900
commitb054c94fa5479141cb18fd5436f1432343f4187b (patch)
tree1ec95e21399deca7c828565d1d86c0783b7ce165 /src/main.zig
parent04d3a2d673593c5a36f40894fb29d090a7d7a197 (diff)
downloadRayTracingInOneWeekend.zig-b054c94fa5479141cb18fd5436f1432343f4187b.tar.gz
RayTracingInOneWeekend.zig-b054c94fa5479141cb18fd5436f1432343f4187b.tar.zst
RayTracingInOneWeekend.zig-b054c94fa5479141cb18fd5436f1432343f4187b.zip
6.2
Diffstat (limited to 'src/main.zig')
-rw-r--r--src/main.zig10
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;
}
}