From 43db4a78a0d905b3cc7af8a174b9d05f6166817d Mon Sep 17 00:00:00 2001 From: Jerome St-Louis Date: Wed, 6 Aug 2014 22:44:12 -0400 Subject: [PATCH] ecere/gfx3D/Plane: Added sphere intersection function --- ecere/src/gfx/3D/Plane.ec | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/ecere/src/gfx/3D/Plane.ec b/ecere/src/gfx/3D/Plane.ec index f7a8fc6..bc203d2 100644 --- a/ecere/src/gfx/3D/Plane.ec +++ b/ecere/src/gfx/3D/Plane.ec @@ -6,6 +6,33 @@ public struct Line { Vector3D p0; Vector3D delta; + + bool IntersectSphere(double radius, double * t) + { + double a = delta.DotProduct(delta); + double b = 2 * delta.DotProduct(p0); + double c = p0.DotProduct(p0) - radius * radius; + double disc = b * b - 4 * a * c; + if(disc >= 0) + { + double distSqrt = sqrt(disc); + double q = ((b < 0) ? (-b - distSqrt) : (-b + distSqrt)) /2; + double t0 = q / a, t1 = c / q; + if (t0 > t1) + { + double temp = t0; + t0 = t1; + t1 = temp; + } + if (t1 >= 0) + { + if(t) + *t = (t0 >= 0) ? t0 : t1; + return true; + } + } + return false; + } }; public struct Plane -- 1.8.3.1