%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{code} -- |Math Functions used in HDemo library module Graphics.HDemo.MathUtils( clamp, toRadians, catmullRomVal ) where \end{code} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{code} -- |Return a value x clamped between a within a given range [xmin, xmax]. clamp :: (Ord a) => a -> a -> a -> a clamp xmin xmax x | x < xmin = xmin | x > xmax = xmax | otherwise = x \end{code} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{code} toRadians :: (Floating a) => a -> a toRadians a = (pi * a) / 180 \end{code} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{code} catmullRomVal :: (Fractional a) => a -> a -> a -> a -> a -> a catmullRomVal p0 p1 p2 p3 t = 0.5 * ((2 * p1) + ((-p0) + p2) * t + (2*p0 - 5*p1 + 4*p2 - p3) * t * t + ((-p0) + 3*p1- 3*p2 + p3) * t * t * t) \end{code} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%