NAME
   Math::Bezier - solution of Bezier Curves

SYNOPSIS
       use Math::Bezier;

       # create curve passing list of (x, y) control points
       my $bezier = Math::Bezier->new($x1, $y1, $x2, $y2, ..., $xn, $yn);

       # or pass reference to list of control points
       my $bezier = Math::Bezier->new([ $x1, $y1, $x2, $y2, ..., $xn, $yn]);

       # determine (x, y) at point along curve, range 0 -> 1
       my ($x, $y) = $bezier->point(0.5);

       # returns list ref in scalar context
       my $xy = $bezier->point(0.5);

       # return list of 20 (x, y) points along curve
       my @curve = $bezier->curve(20);

       # returns list ref in scalar context
       my $curve = $bezier->curve(20);

DESCRIPTION
   This module implements the algorithm for the solution of Bezier
   curves as presented by Robert D. Miller in Graphics Gems V,
   "Quick and Simple Bezier Curve Drawing".

   A new Bezier curve is created using the new() constructor,
   passing a list of (x, y) control points.

       use Math::Bezier;

       my @control = ( 0, 0, 10, 20, 30, -20, 40, 0 );
       my $bezier  = Math::Bezier->new(@control);

   Alternately, a reference to a list of control points may be
   passed.

       my $bezier  = Math::Bezier->new(\@control);

   The point($theta) method can then be called on the object,
   passing a value in the range 0 to 1 which represents the
   distance along the curve. When called in list context, the
   method returns the x and y coordinates of that point on the
   Bezier curve.

       my ($x, $y) = $bezier->point(0.5);
       print "x: $x  y: $y\n

   When called in scalar context, it returns a reference to a list
   containing the x and y coordinates.

       my $point = $bezier->point(0.5);
       print "x: $point->[0]  y: $point->[1]\n";

   The curve($n) method can be used to return a set of points
   sampled along the length of the curve (i.e. in the range 0 <=
   $theta <= 1). The parameter indicates the number of sample
   points required, defaulting to 20 if undefined. The method
   returns a list of ($x1, $y1, $x2, $y2, ..., $xn, $yn) points
   when called in list context, or a reference to such an array
   when called in scalar context.

       my @points = $bezier->curve(10);

       while (@points) {
           my ($x, $y) = splice(@points, 0, 2);
           print "x: $x  y: $y\n";
       }

       my $points = $bezier->curve(10);

       while (@$points) {
           my ($x, $y) = splice(@$points, 0, 2);
           print "x: $x  y: $y\n";
       }

AUTHOR
   Andy Wardley <[email protected]>

SEE ALSO
   Graphics Gems 5, edited by Alan W. Paeth, Academic Press, 1995,
   ISBN 0-12-543455-3. Section IV.8, 'Quick and Simple Bezier Curve
   Drawing' by Robert D. Miller, pages 206-209.