{-# LANGUAGE RankNTypes #-} -- | Hyprometric color ramps, for making pretty images from scalar data. module Data.Array.Repa.Algorithms.ColorRamp (rampColorHotToCold) where -- | Standard Hot to Cold hypsometric color ramp. -- Color sequence is red, yellow, green, cyan, blue. rampColorHotToCold :: forall a . (Ord a, Floating a) => a -- ^ Minimum value of range. -> a -- ^ Maximum value of range. -> a -- ^ Data value. -> (a, a, a) {-# INLINE rampColorHotToCold #-} rampColorHotToCold vmin vmax vNotNorm = let v | vNotNorm < vmin = vmin | vNotNorm > vmax = vmax | otherwise = vNotNorm dv = vmax - vmin result | v < vmin + 0.25 * dv = ( 0 , 4 * (v - vmin) / dv , 1.0) | v < vmin + 0.5 * dv = ( 0 , 1.0 , 1 + 4 * (vmin + 0.25 * dv - v) / dv) | v < vmin + 0.75 * dv = ( 4 * (v - vmin - 0.5 * dv) / dv , 1.0 , 0.0) | otherwise = ( 1.0 , 1 + 4 * (vmin + 0.75 * dv - v) / dv , 0) in result