]> gitweb.michael.orlitzky.com - spline3.git/blobdiff - src/Tetrahedron.hs
Fix the tetrahedron collision detection.
[spline3.git] / src / Tetrahedron.hs
index eefbe118274993c166001733e42fc196187d90d7..6c13f4bbb429f2a185cdd1eaae3a541f1b147cb8 100644 (file)
@@ -6,6 +6,7 @@ import Prelude hiding (LT)
 import Test.QuickCheck (Arbitrary(..), Gen)
 
 import Cardinal
+import Comparisons (nearly_ge)
 import FunctionValues
 import Misc (factorial)
 import Point
@@ -42,7 +43,10 @@ instance Show Tetrahedron where
 instance ThreeDimensional Tetrahedron where
     center t = ((v0 t) + (v1 t) + (v2 t) + (v3 t)) `scale` (1/4)
     contains_point t p =
-        (b0 t p) >= 0 && (b1 t p) >= 0 && (b2 t p) >= 0 && (b3 t p) >= 0
+      (b0 t p) `nearly_ge` 0 &&
+      (b1 t p) `nearly_ge` 0 &&
+      (b2 t p) `nearly_ge` 0 &&
+      (b3 t p) `nearly_ge` 0
 
 
 polynomial :: Tetrahedron -> (RealFunction Point)
@@ -223,18 +227,10 @@ vol_matrix t = (4><4)
                 y1, y2, y3, y4,
                 z1, z2, z3, z4 ]
     where
-      x1 = x_coord (v0 t)
-      x2 = x_coord (v1 t)
-      x3 = x_coord (v2 t)
-      x4 = x_coord (v3 t)
-      y1 = y_coord (v0 t)
-      y2 = y_coord (v1 t)
-      y3 = y_coord (v2 t)
-      y4 = y_coord (v3 t)
-      z1 = z_coord (v0 t)
-      z2 = z_coord (v1 t)
-      z3 = z_coord (v2 t)
-      z4 = z_coord (v3 t)
+      (x1, y1, z1) = v0 t
+      (x2, y2, z2) = v1 t
+      (x3, y3, z3) = v2 t
+      (x4, y4, z4) = v3 t
 
 -- | Computed using the formula from Lai & Schumaker, Definition 15.4,
 --   page 436.