module Graphics.Proc.Lib.Shape.Curve( bezier ) where import Graphics.Proc.Core import Graphics.Proc.Lib.Shape.Primitive2D bezierPointsNum = 35 -- | Draws a Bezier curve on the screen. These curves are defined by a series -- of anchor and control points. The first two parameters specify the first -- anchor point and the last two parameters specify the other anchor point. -- The middle parameters specify the control points which define the shape of the curve. -- Bezier curves were developed by French engineer Pierre Bezier. -- -- processing docs: bezier :: P2 -> P2 -> P2 -> P2 -> Draw bezier p1 p2 p3 p4 = linePath (map phi ts) where ts = [0, 1 / bezierPointsNum .. 1] phi t = ((1 - t) ** 3) *^ p1 + (3 * t * ((1 - t) ** 2)) *^ p2 + (3 * (t ** 2) * (1 - t)) *^ p3 + (t ** 3) *^ p4