-zoom :: Grid -> ScaleFactor -> Values3D
-zoom g scale_factor
- | xsize == 0 || ysize == 0 || zsize == 0 = empty3d
- | otherwise =
- R.force $ R.unsafeTraverse arr transExtent (zoom_lookup g scale_factor)
- where
- arr = function_values g
- (xsize, ysize, zsize) = dims arr
- transExtent = zoom_shape scale_factor
-
-
-
-
-{-# INLINE zoom_chunk_lookup #-}
-zoom_chunk_lookup :: Grid -> ScaleFactor -> a -> (R.DIM3 -> Double)
-zoom_chunk_lookup g scale_factor _ =
- zoom_chunk_result g scale_factor
-
-
-{-# INLINE zoom_chunk_result #-}
-zoom_chunk_result :: Grid -> ScaleFactor -> R.DIM3 -> Double
-zoom_chunk_result g (sfx, sfy, sfz) (R.Z R.:. m R.:. n R.:. o)
- | m /= 1 = 0 -- We're going to drop these anyway.
- | otherwise = f p
- where
- offset = (h g)/2
- sfx' = fromIntegral sfx
- sfy' = fromIntegral sfy
- sfz' = fromIntegral sfz
- m' = (fromIntegral m) / sfx' - offset
- n' = (fromIntegral n) / sfy' - offset
- o' = (fromIntegral o) / sfz' - offset
- p = (m', n', o') :: Point
- cube = find_containing_cube g p
- t = find_containing_tetrahedron cube p
- f = polynomial t
-
-
-zoom_chunk :: Grid -> ScaleFactor -> Values3D
-zoom_chunk g scale_factor