hps-0.11: Graphics/PS/Bezier.hs
-- | Bezier functions.
module Graphics.PS.Bezier (bezier4) where
import Graphics.PS.Pt
{--
bezier3 :: Pt -> Pt -> Pt -> Double -> Pt
bezier3 (Pt x1 y1) (Pt x2 y2) (Pt x3 y3) mu = (Pt x y)
where a = mu*mu
b = 1 - mu
c = b*b
x = x1*c + 2*x2*b*mu + x3*a
y = y1*c + 2*y2*b*mu + y3*a
--}
-- | Four-point bezier curve interpolation. The index /mu/ is
-- in the range zero to one.
bezier4 :: Pt -> Pt -> Pt -> Pt -> Double -> Pt
bezier4 (Pt x1 y1) (Pt x2 y2) (Pt x3 y3) (Pt x4 y4) mu =
let a = 1 - mu
b = a*a*a
c = mu*mu*mu
x = b*x1 + 3*mu*a*a*x2 + 3*mu*mu*a*x3 + c*x4
y = b*y1 + 3*mu*a*a*y2 + 3*mu*mu*a*y3 + c*y4
in Pt x y