module Data.Array.Repa.IO.ColorRamp
(rampColorHotToCold)
where
rampColorHotToCold
:: forall a
. (Ord a, Floating a)
=> a
-> a
-> a
-> (a, a, a)
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