## JMSL Tutorial: MusicShape

Let's have a look at Interpolators, which are another powerful way
of generating MusicShape data (or any data for that matter).

An Interpolator defines a function intersecting two points, and
calculates values for you anywhere along that function.

For example, you may define a LinearInterpolator to interpolate along
the line containing the two points (0,5) and (10,100). Here's how:

LinearInterpolator myLine = new LinearInterpolator(0.0, 5.0, 10.0, 100.0);

From then on, the LinearInterpolator's interp() method
can be fed an x value, and will return the corresponding y along
the line defined by those two points. Here's how:

double x = 1.414213562373095;
double y = myLine.interp(x);

You can also change an existing Interpolator's values with the
setInterp(x1, y1, x2, y2) method.

JMSL's **util** package contains a number of Interpolators, including the LinearInterpolator,
ExponentialInterpolator, and ExponentialDecayInterpolator. These latter two
Interpolators have additional methods to set the steepness of their
curvature.

This applet illustrates a MusicShape whose data is defined by a variety of
different Interpolators.

View the source of this applet here.

You have seen that MusicShapes can be created in a number of interesting
ways. Take a moment to review the
MusicShape docs, which
detail the methods that a MusicShape has to manipulate its own data internally.
Methods include sorting, scrambling, randomizing, reversing, inverting, and scaling.

(C) 1997 Phil Burk and Nick Didkovsky, All Rights Reserved
JMSL is based upon HMSL (C) Phil Burk, Larry Polansky and David Rosenboom.