From: Michael Orlitzky Date: Mon, 22 Aug 2011 19:33:28 +0000 (-0400) Subject: Add the "zoom" function. X-Git-Tag: 0.0.1~238 X-Git-Url: https://gitweb.michael.orlitzky.com/?a=commitdiff_plain;h=46b1f2e3741d6571c2f931371222f8970b6c7f63;p=spline3.git Add the "zoom" function. --- diff --git a/src/Grid.hs b/src/Grid.hs index efa6341..63b2cfa 100644 --- a/src/Grid.hs +++ b/src/Grid.hs @@ -6,10 +6,11 @@ where import Test.QuickCheck (Arbitrary(..), Gen, Positive(..)) -import Cube (Cube(Cube)) +import Cube (Cube(Cube), find_containing_tetrahedra) import FunctionValues import Misc (flatten) import Point (Point) +import Tetrahedron (polynomial) import ThreeDimensional (contains_point) @@ -81,3 +82,29 @@ find_containing_cubes g p = where all_cubes = flatten $ cubes g contains_our_point = flip contains_point p + + + +zoom :: Grid -> Int -> [[[Double]]] +zoom g scale_factor + | fvs == [[[]]] = [] + | head fvs == [[]] = [] + | otherwise = + [[[f p | i <- [0..scaled_zsize], + let i' = scale_dimension i, + let j' = scale_dimension j, + let k' = scale_dimension k, + let p = (i', j', k') :: Point, + let c = (find_containing_cubes g p) !! 0, + let t = (find_containing_tetrahedra c p) !! 0, + let f = polynomial t] + | j <- [0..scaled_ysize]] + | k <- [0..scaled_xsize]] + where + scale_dimension :: Int -> Double + scale_dimension x = (fromIntegral x) / (fromIntegral scale_factor) + + fvs = function_values g + scaled_zsize = ((length fvs) - 1) * scale_factor + scaled_ysize = (length (head fvs) - 1) * scale_factor + scaled_xsize = (length (head $ head fvs) - 1) * scale_factor