Browse Source

prevent infinite recursion

David Rose 17 years ago
parent
commit
336fb90627
2 changed files with 20 additions and 15 deletions
  1. 10 8
      panda/src/collide/collisionSphere.cxx
  2. 10 7
      panda/src/collide/collisionTube.cxx

+ 10 - 8
panda/src/collide/collisionSphere.cxx

@@ -767,15 +767,17 @@ intersects_parabola(double &t, const Parabolaf &parabola,
   // point and comparing its distance from the linear intervening
   // point and comparing its distance from the linear intervening
   // point.
   // point.
   double tmid = (t1 + t2) * 0.5;
   double tmid = (t1 + t2) * 0.5;
-  LPoint3f pmid = parabola.calc_point(tmid);
-  LPoint3f pmid2 = (p1 + p2) * 0.5f;
-
-  if ((pmid - pmid2).length_squared() > 0.001f) {
-    // Subdivide.
-    if (intersects_parabola(t, parabola, t1, tmid, p1, pmid)) {
-      return true;
+  if (tmid != t1 && tmid != t2) {
+    LPoint3f pmid = parabola.calc_point(tmid);
+    LPoint3f pmid2 = (p1 + p2) * 0.5f;
+  
+    if ((pmid - pmid2).length_squared() > 0.001f) {
+      // Subdivide.
+      if (intersects_parabola(t, parabola, t1, tmid, p1, pmid)) {
+        return true;
+      }
+      return intersects_parabola(t, parabola, tmid, t2, pmid, p2);
     }
     }
-    return intersects_parabola(t, parabola, tmid, t2, pmid, p2);
   }
   }
 
 
   // The line segment is sufficiently close; compare the segment itself.
   // The line segment is sufficiently close; compare the segment itself.

+ 10 - 7
panda/src/collide/collisionTube.cxx

@@ -853,15 +853,18 @@ intersects_parabola(double &t, const Parabolaf &parabola,
   // point and comparing its distance from the linear intervening
   // point and comparing its distance from the linear intervening
   // point.
   // point.
   double tmid = (t1 + t2) * 0.5;
   double tmid = (t1 + t2) * 0.5;
-  LPoint3f pmid = parabola.calc_point(tmid);
-  LPoint3f pmid2 = (p1 + p2) * 0.5f;
 
 
-  if ((pmid - pmid2).length_squared() > 0.001f) {
-    // Subdivide.
-    if (intersects_parabola(t, parabola, t1, tmid, p1, pmid)) {
-      return true;
+  if (tmid != t1 && tmid != t2) {
+    LPoint3f pmid = parabola.calc_point(tmid);
+    LPoint3f pmid2 = (p1 + p2) * 0.5f;
+
+    if ((pmid - pmid2).length_squared() > 0.001f) {
+      // Subdivide.
+      if (intersects_parabola(t, parabola, t1, tmid, p1, pmid)) {
+        return true;
+      }
+      return intersects_parabola(t, parabola, tmid, t2, pmid, p2);
     }
     }
-    return intersects_parabola(t, parabola, tmid, t2, pmid, p2);
   }
   }
 
 
   // The line segment is sufficiently close; compare the segment itself.
   // The line segment is sufficiently close; compare the segment itself.