Math::Bezier - solution of Bezier Curves

# 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->  y: \$point->\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 <abw@kfs.org>