`LatheCurve`

takes two arrays of x- and y-values as input, and creates two new arrays of x- and y-values representing the curve. The difference between the two pairs of arrays is the addition of interpolated points in the second group to represent curve segments. This change is illustrated by Figure 17-9, where the input arrays have 3 points, but the lathe curve arrays have 13.

Figure 17-9. Interpolating curves

If all the input points became the starting and ending coordinates for curve segments, then the size of the output arrays would be `(<`

*number of points*
`> - 1)*(<`

*STEP*
`> + 1) + 1`

, where `STEP`

is the number of introduced interpolation points.

Unfortunately, the sizes of the output arrays is a more complicated matter since points connected by straight lines don't require any additional points. The size calculation is implemented in `countVerts()`

, which checks the sign of each x value in the input array (`xsIn[]`

) to decide on the number of output points:

private int countVerts(double xsIn[], int num) { int numOutVerts = 1; for(int i=0; i < num-1; i++) { if (xsIn[i] < 0) // straight line starts here numOutVerts++; else // curve segment starts here numOutVerts += (STEP+1); } return numOutVerts; }

A crucial problem is how to interpolate the curve segment. Possible methods include Bezier interpolation and B-splines. I use *Hermite curves*
: a curve segment ...

Start Free Trial

No credit card required