-- | Takes a three-dimensional list of 'Double' and a set of 3D
-- coordinates (i,j,k), and returns the value at (i,j,k) in the
--- supplied list. If there is no such value, zero is returned.
+-- supplied list. If there is no such value, we choose a nearby
+-- point and use its value.
value_at :: Values3D -> Int -> Int -> Int -> Double
-value_at values i j k
- | i < 0 = 0
- | j < 0 = 0
- | k < 0 = 0
- | xsize <= i = 0
- | ysize <= j = 0
- | zsize <= k = 0
- | otherwise = idx values i j k
+value_at v3d i j k
+ | i < 0 = value_at v3d 0 j k
+ | j < 0 = value_at v3d i 0 k
+ | k < 0 = value_at v3d i j 0
+ | xsize <= i = value_at v3d xsize j k
+ | ysize <= j = value_at v3d i ysize k
+ | zsize <= k = value_at v3d i j zsize
+ | otherwise = idx v3d i j k
where
- (xsize, ysize, zsize) = dims values
+ (xsize, ysize, zsize) = dims v3d
-- | Given a three-dimensional list of 'Double' and a set of 3D