## Parametric curve

The `parametric-curve` library provides an implementation of parametric curves. Parametric curves are n-dimensional curves described by parametric equations, one per each dimension. For example:

x = a cos (t) y = a sin (t) z = bt

In this example, `t` is the parameter, and `a` and `b` are constants.

## Usage

(require-extension parametric-curve)

## Documentation

### Procedures

*[procedure]*

`parametric-curve? :: OBJECT -> BOOL`

Returns `#t` if the given object is a parametric curve, `#f` otherwise.

*[procedure]*

`simple-curve :: N * K * FS * TMIN * TMAX -> PCURVE`

Basic parametric curve constructor.

`N`- number of interpolation points (N >= 3)
`K`- continuity class of the interpolating spline for this curve (1 or 2, for first or second derivative)
`FS`- a list of one-argument procedures that are evaluated to obtain points on the curve. The length of
`FS`determines the dimensionality of the curve `TMIN`- minimum value for the curve parameter
`TMIN`- maximum value for the curve parameter

*[procedure]*

`sample-curve :: PCURVE -> (T -> POINT)`

Constructs a procedure to sample the curve at the given parameter value.

*[procedure]*

`sample-curve* :: PCURVE -> (T LIST -> POINT LIST)`

Constructs a procedure to sample the curve at the given parameter values.

*[procedure]*

`linear-curve :: N * COEFFS * TMIN * TMAX -> PCURVE`

Constructor for a linear curve of the form `c1 * x + c2`.

`N`- number of interpolation points (N >= 3)
`COEFFS`- supplies c1 and c2 for the different dimensions
`TMIN`- minimum value for the curve parameter
`TMAX`- maximum value for the curve parameter

*[procedure]*

`line-segment:: N * COEFFS -> PCURVE`

Creates a line segment whose starting point is zero, and its end points is defined by `COEFFS`. `N` is the number of interpolating points.

*[procedure]*

`map-curve :: FS * PCURVE -> PCURVE`

Maps the given functions to the parametric curve.

*[procedure]*

`iterate-curve :: PCURVE * N -> POINT LIST`

Samples a parametric curve at `N` regular intervals in the range `xmin..xmax` inclusive.

*[procedure]*

`range-curve :: PCURVE * N * (X1,XN) LIST -> POINT LIST`

Samples a parametric curve at regular intervals in the given ranges.

*[procedure]*

`arc-length :: PCURVE * DX -> NUMBER`

Computers the arc length of the curve given step DX.

## Examples

## About this egg

### Author

### Version history

- 1.13
- Added matchable as a test dependency [reported by mario]
- 1.7
- Added arc-length
- 1.4
- Added line-segment
- 1.0
- Initial release

### License

Copyright 2012-2015 Ivan Raikov This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. A full copy of the GPL license can be found at <http://www.gnu.org/licenses/>.