From 7ca4d094639ffc302cdc7da5cdc291cc32005ecb Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Tue, 25 May 2010 23:31:52 -0600 Subject: Clean up sphere intersection code a bit. --- bench/libdimension/list.c | 2 +- libdimension/sphere.c | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/bench/libdimension/list.c b/bench/libdimension/list.c index 9af3279..16eb501 100644 --- a/bench/libdimension/list.c +++ b/bench/libdimension/list.c @@ -103,7 +103,7 @@ main() sandglass_bench_noprecache(&sandglass, split = dmnsn_list_split(list)); printf("dmnsn_list_split(): %ld\n", sandglass.grains); - /* dmnsn_list_sort() */ + /* dmnsn_list_sort() */ sandglass_bench(&sandglass, dmnsn_list_sort(list, &dmnsn_comparator)); printf("dmnsn_list_sort(): %ld\n", sandglass.grains); diff --git a/libdimension/sphere.c b/libdimension/sphere.c index 0477c24..a3ecf2d 100644 --- a/libdimension/sphere.c +++ b/libdimension/sphere.c @@ -54,14 +54,14 @@ dmnsn_sphere_intersection_fn(const dmnsn_object *sphere, dmnsn_line line, /* Solve (x0 + nx*t)^2 + (y0 + ny*t)^2 + (z0 + nz*t)^2 == 1 */ double a, b, c, t; - a = l.n.x*l.n.x + l.n.y*l.n.y + l.n.z*l.n.z; - b = 2.0*(l.n.x*l.x0.x + l.n.y*l.x0.y + l.n.z*l.x0.z); - c = l.x0.x*l.x0.x + l.x0.y*l.x0.y + l.x0.z*l.x0.z - 1.0; + a = dmnsn_vector_dot(l.n, l.n); + b = 2.0*dmnsn_vector_dot(l.n, l.x0); + c = dmnsn_vector_dot(l.x0, l.x0) - 1.0; - if (b*b - 4.0*a*c >= 0) { - t = (-b - sqrt(b*b - 4.0*a*c))/(2*a); + if (b*b - 4.0*a*c >= 0.0) { + t = (-b - sqrt(b*b - 4.0*a*c))/(2.0*a); if (t < 0.0) { - t = (-b + sqrt(b*b - 4.0*a*c))/(2*a); + t = (-b + sqrt(b*b - 4.0*a*c))/(2.0*a); } if (t >= 0.0) { -- cgit v1.2.3