[gimp] sphere-designer: Don't compute sqrt() unless absolutely	necessary
- From: Mukund Sivaraman <muks src gnome org>
 
- To: commits-list gnome org
 
- Cc: 
 
- Subject: [gimp] sphere-designer: Don't compute sqrt() unless absolutely	necessary
 
- Date: Tue, 11 Oct 2011 05:03:15 +0000 (UTC)
 
commit 238736fb8f95d7288aa8721823e19f10a54d79a0
Author: Mukund Sivaraman <muks banu com>
Date:   Tue Oct 11 10:01:36 2011 +0530
    sphere-designer: Don't compute sqrt() unless absolutely necessary
 plug-ins/common/sphere-designer.c |   18 +++++++++++++++---
 1 files changed, 15 insertions(+), 3 deletions(-)
---
diff --git a/plug-ins/common/sphere-designer.c b/plug-ins/common/sphere-designer.c
index 880895e..c4eef9e 100644
--- a/plug-ins/common/sphere-designer.c
+++ b/plug-ins/common/sphere-designer.c
@@ -524,6 +524,18 @@ vdist (GimpVector4 *a, GimpVector4 *b)
 }
 
 static inline gdouble
+vdist2 (GimpVector4 *a, GimpVector4 *b)
+{
+  gdouble x, y, z;
+
+  x = a->x - b->x;
+  y = a->y - b->y;
+  z = a->z - b->z;
+
+  return x * x + y * y + z * z;
+}
+
+static inline gdouble
 vlen (GimpVector4 *a)
 {
   return sqrt (a->x * a->x + a->y * a->y + a->z * a->z);
@@ -716,7 +728,7 @@ static gdouble
 checkdisc (ray * r, disc * disc)
 {
   GimpVector4 p, *v = &disc->a;
-  gdouble t, d;
+  gdouble t, d2;
   gdouble i, j, k;
 
   i = r->v2.x - r->v1.x;
@@ -730,9 +742,9 @@ checkdisc (ray * r, disc * disc)
   p.y = r->v1.y + j * t;
   p.z = r->v1.z + k * t;
 
-  d = vdist (&p, v);
+  d2 = vdist2 (&p, v);
 
-  if (d > disc->r)
+  if (d2 > disc->r * disc->r)
     t = 0.0;
 
   return t;
[
Date Prev][
Date Next]   [
Thread Prev][
Thread Next]   
[
Thread Index]
[
Date Index]
[
Author Index]