]> gitweb.michael.orlitzky.com - spline3.git/commitdiff
Add the "number" field for tetrahedra.
authorMichael Orlitzky <michael@orlitzky.com>
Sun, 4 Sep 2011 12:37:23 +0000 (08:37 -0400)
committerMichael Orlitzky <michael@orlitzky.com>
Sun, 4 Sep 2011 12:37:23 +0000 (08:37 -0400)
src/Tetrahedron.hs

index 1f7c22b355c0392f26988a1d9c315e63fee2d68e..d468f0c570a920fe3967fdd7e20973ef2cd9945e 100644 (file)
@@ -3,7 +3,7 @@ where
 
 import Numeric.LinearAlgebra hiding (i, scale)
 import Prelude hiding (LT)
-import Test.QuickCheck (Arbitrary(..), Gen)
+import Test.QuickCheck (Arbitrary(..), Gen, choose)
 
 import Cardinal
 import Comparisons (nearly_ge)
@@ -13,13 +13,20 @@ import Point
 import RealFunction
 import ThreeDimensional
 
-data Tetrahedron = Tetrahedron { fv :: FunctionValues,
-                                 v0 :: Point,
-                                 v1 :: Point,
-                                 v2 :: Point,
-                                 v3 :: Point,
-                                 precomputed_volume :: Double }
-                   deriving (Eq)
+data Tetrahedron =
+  Tetrahedron { fv :: FunctionValues,
+                v0 :: Point,
+                v1 :: Point,
+                v2 :: Point,
+                v3 :: Point,
+                precomputed_volume :: Double,
+
+                -- | Between 0 and 23; used to quickly determine which
+                --   tetrahedron I am in the parent 'Cube' without
+                --   having to compare them all.
+                number :: Int
+              }
+    deriving (Eq)
 
 
 instance Arbitrary Tetrahedron where
@@ -29,11 +36,13 @@ instance Arbitrary Tetrahedron where
       rnd_v2 <- arbitrary :: Gen Point
       rnd_v3 <- arbitrary :: Gen Point
       rnd_fv <- arbitrary :: Gen FunctionValues
+      rnd_no <- choose (0,23)
+
       -- We can't assign an incorrect precomputed volume,
       -- so we have to calculate the correct one here.
-      let t' = Tetrahedron rnd_fv rnd_v0 rnd_v1 rnd_v2 rnd_v3 0
+      let t' = Tetrahedron rnd_fv rnd_v0 rnd_v1 rnd_v2 rnd_v3 0 rnd_no
       let vol = volume t'
-      return (Tetrahedron rnd_fv rnd_v0 rnd_v1 rnd_v2 rnd_v3 vol)
+      return (Tetrahedron rnd_fv rnd_v0 rnd_v1 rnd_v2 rnd_v3 vol rnd_no)
 
 
 instance Show Tetrahedron where