#include "MusimatChapter9.h"Go to the source code of this file.
Functions | |
| MusimatChapter9Section (C091201f) | |
| Real | linearInterpolate (Real x, Real xMin, Real xMax, Real yMin, Real yMax) |
| Static Void | para1 () |
| IntegerList | stretch (IntegerList L, Integer yMin, Integer yMax) |
| Static Void | para2 () |
| Real linearInterpolate | ( | Real | x, |
| Real | xMin, | ||
| Real | xMax, | ||
| Real | yMin, | ||
| Real | yMax | ||
| ) |
| MusimatChapter9Section | ( | C091201f | ) |
Definition at line 2 of file C091201f.cpp.
References para1(), and para2().
{
Print("*** Linear Interpolation ***");
/*****************************************************************************
Linear Interpolation
Linear interpolation allows us to map a range of values so that it covers
a proportionately wider or narrower range. Figure 9.14 shows linear interpolation from the range
1-4 on the left being mapped to the range 3-9 on the right. The value 3 on the left corresponds by
linear interpolation to 7 on the right. Linear interpolation maintains the linear proportions of the
two number lines: 3 is two-thirds of the way from 1 to 4, and 7 is two-thirds of the way from 3 to 9.
Linear interpolation is a slight generalization of unit interpolation, as follows. If xMax is
the upper bound and xMin is the lower bound, and x is a parameter in the range xmin <= x <= xmax, then
x - xMin
y = ----------- (yMax - yMin) + yMin
xMax - xMin
sets y to a position within the range yMin <= y <= yMax that is proportional to the position of x within
its range. Below is the definition of linear interpolation in Musimat:
*****************************************************************************/
para1(); // Step into this function to continue.
para2(); // Step into this function to continue.
}
| Static Void para1 | ( | ) |
Definition at line 40 of file C091201f.cpp.
References linearInterpolate().
{
/*****************************************************************************
Here is an example of linear interpolation:
*****************************************************************************/
Print("*** Linear Interpolation ***");
Print("linearInterpolate(3.0, 1.0, 4.0, 3.0, 9.0) = ", linearInterpolate(3.0, 1.0, 4.0, 3.0, 9.0));
/*****************************************************************************
We also can use linear interpolation to map an entire function to a different range. We do so by
applying linear interpolation to every point on the function. For example, we can scale a chromatic
melody to occupy a wider or narrower tessatura as follows:
*****************************************************************************/
}
| Static Void para2 | ( | ) |
Definition at line 64 of file C091201f.cpp.
References stretch().
{
/*****************************************************************************
For example, if the input is
*****************************************************************************/
Print("*** Stretch ***");
IntegerList L(0, 8, 10, 6, 7, 5, 9, 1, 3, 2, 11, 4);
Print("Source list: ", L);
/*****************************************************************************
invoking stretch() with these arguments
*****************************************************************************/
Print("stretch(L, 24, 47)=", stretch(L, 24, 47));
/*****************************************************************************
will scale the row to cover a two-octave range and offset it upward by one octave.
Then x will be {24, 40, 44, 36, 38, 34, 42, 26, 30, 28, 47, 32}. It can also be used to com-
press rows. With the same input,
*****************************************************************************/
Print("stretch(L, 0, 5)=", stretch(L, 0, 5));
/*****************************************************************************
will produce {0, 3, 4, 2, 3, 2, 4, 0, 1, 0, 5, 1}.
*****************************************************************************/
}
| IntegerList stretch | ( | IntegerList | L, |
| Integer | yMin, | ||
| Integer | yMax | ||
| ) |
Definition at line 55 of file C091201f.cpp.
References linearInterpolate().
{
Integer xMin = Integer(Min(L)); // find the list's minimum
Integer xMax = Integer(Max(L)); // find the list's maximum
For (Integer i = 0; i < Length(L); i = i + 1) {
L[i] = Integer(linearInterpolate(L[i], xMin, xMax, yMin, yMax));
}
Return(L);
}
1.7.2