X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2FGrid.hs;h=dc52482b0eb3cc2bc88656df24681759b8a4d346;hb=715be016934300f596a11e4fc5b8ca2ec42d6c34;hp=d5553b426fc6c18c38438afec5d3039ee1c2a4cc;hpb=610d0f0af8a802c26d51231d6e2426a72e40fd2d;p=spline3.git diff --git a/src/Grid.hs b/src/Grid.hs index d5553b4..dc52482 100644 --- a/src/Grid.hs +++ b/src/Grid.hs @@ -30,7 +30,7 @@ import Cube (Cube(Cube), tetrahedron) import Examples (trilinear, trilinear9x9x9, zeros, naturals_1d) import FunctionValues (make_values, value_at) -import Point (Point) +import Point (Point(..)) import ScaleFactor (ScaleFactor) import Tetrahedron (Tetrahedron, c, polynomial, v0, v1, v2, v3) import ThreeDimensional (ThreeDimensional(..)) @@ -43,7 +43,7 @@ import Values (Values3D, dims, empty3d, zoom_shape) -- another in each direction (x,y,z). data Grid = Grid { h :: Double, -- MUST BE GREATER THAN ZERO! function_values :: Values3D } - deriving (Eq, Show) + deriving (Show) instance Arbitrary Grid where @@ -105,10 +105,9 @@ calculate_containing_cube_coordinate g coord -- Since our grid is rectangular, we can figure this out without having -- to check every cube. find_containing_cube :: Grid -> Point -> Cube -find_containing_cube g p = +find_containing_cube g (Point x y z) = cube_at g i j k where - (x, y, z) = p i = calculate_containing_cube_coordinate g x j = calculate_containing_cube_coordinate g y k = calculate_containing_cube_coordinate g z @@ -128,7 +127,7 @@ zoom_result v3d (sfx, sfy, sfz) (R.Z R.:. m R.:. n R.:. o) = m' = (fromIntegral m) / (fromIntegral sfx) - offset n' = (fromIntegral n) / (fromIntegral sfy) - offset o' = (fromIntegral o) / (fromIntegral sfz) - offset - p = (m', n', o') :: Point + p = Point m' n' o' cube = find_containing_cube g p t = find_containing_tetrahedron cube p f = polynomial t @@ -138,7 +137,7 @@ zoom :: Values3D -> ScaleFactor -> Values3D zoom v3d scale_factor | xsize == 0 || ysize == 0 || zsize == 0 = empty3d | otherwise = - R.force $ R.unsafeTraverse v3d transExtent f + R.compute $ R.unsafeTraverse v3d transExtent f where (xsize, ysize, zsize) = dims v3d transExtent = zoom_shape scale_factor @@ -270,25 +269,25 @@ trilinear_c0_t0_tests = test_trilinear_f0_t0_v0 :: Assertion test_trilinear_f0_t0_v0 = - assertEqual "v0 is correct" (v0 t) (1, 1, 1) + assertEqual "v0 is correct" (v0 t) (Point 1 1 1) test_trilinear_f0_t0_v1 :: Assertion test_trilinear_f0_t0_v1 = - assertEqual "v1 is correct" (v1 t) (0.5, 1, 1) + assertEqual "v1 is correct" (v1 t) (Point 0.5 1 1) test_trilinear_f0_t0_v2 :: Assertion test_trilinear_f0_t0_v2 = - assertEqual "v2 is correct" (v2 t) (0.5, 0.5, 1.5) + assertEqual "v2 is correct" (v2 t) (Point 0.5 0.5 1.5) test_trilinear_f0_t0_v3 :: Assertion test_trilinear_f0_t0_v3 = - assertEqual "v3 is correct" (v3 t) (0.5, 1.5, 1.5) + assertEqual "v3 is correct" (v3 t) (Point 0.5 1.5 1.5) test_trilinear_reproduced :: Assertion test_trilinear_reproduced = assertTrue "trilinears are reproduced correctly" $ - and [p (i', j', k') ~= value_at trilinear i j k + and [p (Point i' j' k') ~= value_at trilinear i j k | i <- [0..2], j <- [0..2], k <- [0..2], @@ -306,7 +305,7 @@ test_trilinear_reproduced = test_zeros_reproduced :: Assertion test_zeros_reproduced = assertTrue "the zero function is reproduced correctly" $ - and [p (i', j', k') ~= value_at zeros i j k + and [p (Point i' j' k') ~= value_at zeros i j k | i <- [0..2], j <- [0..2], k <- [0..2], @@ -325,7 +324,7 @@ test_zeros_reproduced = test_trilinear9x9x9_reproduced :: Assertion test_trilinear9x9x9_reproduced = assertTrue "trilinear 9x9x9 is reproduced correctly" $ - and [p (i', j', k') ~= value_at trilinear9x9x9 i j k + and [p (Point i' j' k') ~= value_at trilinear9x9x9 i j k | i <- [0..8], j <- [0..8], k <- [0..8], @@ -355,7 +354,7 @@ test_tetrahedra_collision_sensitivity = where g = make_grid 1 naturals_1d cube = cube_at g 0 18 0 - p = (0, 17.5, 0.5) :: Point + p = Point 0 17.5 0.5 t20 = tetrahedron cube 20