]> gitweb.michael.orlitzky.com - spline3.git/commitdiff
Speed up the Tetrahedron contains_point function by dropping the useless factor of...
authorMichael Orlitzky <michael@orlitzky.com>
Fri, 2 Sep 2011 02:13:04 +0000 (22:13 -0400)
committerMichael Orlitzky <michael@orlitzky.com>
Fri, 2 Sep 2011 02:13:04 +0000 (22:13 -0400)
src/Tetrahedron.hs

index 6c13f4bbb429f2a185cdd1eaae3a541f1b147cb8..95233e008bfa0efe4fb69f20a4485b52f8e53b20 100644 (file)
@@ -43,10 +43,28 @@ 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) `nearly_ge` 0 &&
-      (b1 t p) `nearly_ge` 0 &&
-      (b2 t p) `nearly_ge` 0 &&
-      (b3 t p) `nearly_ge` 0
+      b0_unscaled `nearly_ge` 0 &&
+      b1_unscaled `nearly_ge` 0 &&
+      b2_unscaled `nearly_ge` 0 &&
+      b3_unscaled `nearly_ge` 0
+      where
+        -- Drop the useless division and volume calculation that we
+        -- would do if we used the regular b0,..b3 functions.
+        b0_unscaled :: Double
+        b0_unscaled = volume inner_tetrahedron
+          where inner_tetrahedron = t { v0 = p }
+
+        b1_unscaled :: Double
+        b1_unscaled = volume inner_tetrahedron
+          where inner_tetrahedron = t { v1 = p }
+
+        b2_unscaled :: Double
+        b2_unscaled = volume inner_tetrahedron
+          where inner_tetrahedron = t { v2 = p }
+
+        b3_unscaled :: Double
+        b3_unscaled = volume inner_tetrahedron
+          where inner_tetrahedron = t { v3 = p }
 
 
 polynomial :: Tetrahedron -> (RealFunction Point)