]> gitweb.michael.orlitzky.com - spline3.git/blobdiff - src/Cube.hs
Use a slightly more stable (I think?) formula for the {x,y,z}{min,max}.
[spline3.git] / src / Cube.hs
index 26b513d5983d0f5784375c29246a980db450b9fb..3a997a4ab25e917eccd7e9e18587589b7bc98a32 100644 (file)
@@ -28,15 +28,7 @@ import qualified Face (Face(Face, v0, v1, v2, v3))
 import FunctionValues
 import Misc (all_equal, disjoint)
 import Point
-import Tetrahedron (
-  Tetrahedron(..),
-  c,
-  b0,
-  b1,
-  b2,
-  b3,
-  volume
-  )
+import Tetrahedron (Tetrahedron(..), c, volume)
 import ThreeDimensional
 
 data Cube = Cube { h :: Double,
@@ -82,7 +74,7 @@ instance Show Cube where
 -- | The left-side boundary of the cube. See Sorokina and Zeilfelder,
 --   p. 76.
 xmin :: Cube -> Double
-xmin cube = (2*i' - 1)*delta / 2
+xmin cube = (i' - 1/2)*delta
     where
       i' = fromIntegral (i cube) :: Double
       delta = h cube
@@ -90,7 +82,7 @@ xmin cube = (2*i' - 1)*delta / 2
 -- | The right-side boundary of the cube. See Sorokina and Zeilfelder,
 --   p. 76.
 xmax :: Cube -> Double
-xmax cube = (2*i' + 1)*delta / 2
+xmax cube = (i' + 1/2)*delta
     where
       i' = fromIntegral (i cube) :: Double
       delta = h cube
@@ -98,7 +90,7 @@ xmax cube = (2*i' + 1)*delta / 2
 -- | The front boundary of the cube. See Sorokina and Zeilfelder,
 --   p. 76.
 ymin :: Cube -> Double
-ymin cube = (2*j' - 1)*delta / 2
+ymin cube = (j' - 1/2)*delta
     where
       j' = fromIntegral (j cube) :: Double
       delta = h cube
@@ -106,7 +98,7 @@ ymin cube = (2*j' - 1)*delta / 2
 -- | The back boundary of the cube. See Sorokina and Zeilfelder,
 --   p. 76.
 ymax :: Cube -> Double
-ymax cube = (2*j' + 1)*delta / 2
+ymax cube = (j' + 1/2)*delta
     where
       j' = fromIntegral (j cube) :: Double
       delta = h cube
@@ -114,7 +106,7 @@ ymax cube = (2*j' + 1)*delta / 2
 -- | The bottom boundary of the cube. See Sorokina and Zeilfelder,
 --   p. 76.
 zmin :: Cube -> Double
-zmin cube = (2*k' - 1)*delta / 2
+zmin cube = (k' - 1/2)*delta
     where
       k' = fromIntegral (k cube) :: Double
       delta = h cube
@@ -122,7 +114,7 @@ zmin cube = (2*k' - 1)*delta / 2
 -- | The top boundary of the cube. See Sorokina and Zeilfelder,
 --   p. 76.
 zmax :: Cube -> Double
-zmax cube = (2*k' + 1)*delta / 2
+zmax cube = (k' + 1/2)*delta
     where
       k' = fromIntegral (k cube) :: Double
       delta = h cube
@@ -955,23 +947,6 @@ prop_c1011_identity cube =
         t6 = tetrahedron cube 6
 
 
-
--- | Given in Sorokina and Zeilfelder, p. 78.
-prop_cijk1_identity :: Cube -> Bool
-prop_cijk1_identity cube =
-     and [ c t0 i j k 1 ~=
-                 (c t1 (i+1) j k 0) * ((b0 t0) (v3 t1)) +
-                 (c t1 i (j+1) k 0) * ((b1 t0) (v3 t1)) +
-                 (c t1 i j (k+1) 0) * ((b2 t0) (v3 t1)) +
-                 (c t1 i j k 1) * ((b3 t0) (v3 t1)) | i <- [0..2],
-                                                      j <- [0..2],
-                                                      k <- [0..2],
-                                                      i + j + k == 2]
-      where
-        t0 = tetrahedron cube 0
-        t1 = tetrahedron cube 1
-
-
 -- | The function values at the interior should be the same for all
 --   tetrahedra.
 prop_interior_values_all_identical :: Cube -> Bool
@@ -1139,14 +1114,6 @@ prop_t7_shares_edge_with_t20 cube =
         t20 = tetrahedron cube 20
 
 
-
-
-
-p78_25_properties :: Test.Framework.Test
-p78_25_properties =
-    testGroup "p. 78, Section (2.5) Properties" [
-      testProperty "c_ijk1 identity" prop_cijk1_identity ]
-
 p79_26_properties :: Test.Framework.Test
 p79_26_properties =
     testGroup "p. 79, Section (2.6) Properties" [
@@ -1207,7 +1174,6 @@ edge_incidence_tests =
 cube_properties :: Test.Framework.Test
 cube_properties =
   testGroup "Cube Properties" [
-    p78_25_properties,
     p79_26_properties,
     p79_27_properties,
     p79_28_properties,