CubicSplines.mesa
Copyright Ó 1987, 1992 by Xerox Corporation. All rights reserved.
m.stone February 19, 1980 5:20 PM
Last Edited by: Stone, March 15, 1983 3:26 pm
Russ Atkinson (RRA) February 2, 1987 10:11:13 pm PST
CubicSplines: CEDAR DEFINITIONS = BEGIN
X: NAT = 1;
Y: NAT = 2;
NDIM: NAT = Y;
points in object space
FPCoords: TYPE = ARRAY [X..NDIM] OF REAL;
points in screen space
ScrPt: TYPE = ARRAY [X..NDIM] OF REAL;
Coeffs: TYPE = RECORD
[t3: FPCoords,
t2: FPCoords,
t1: FPCoords,
t0: FPCoords];
CoeffsSequence: TYPE = REF CoeffsSequenceRec;
CoeffsSequenceRec: TYPE = RECORD[element: SEQUENCE length:NAT OF Coeffs];
KnotSequence: TYPE = REF KnotSequenceRec;
KnotSequenceRec: TYPE = RECORD[element: SEQUENCE length:NAT OF FPCoords];
SplineType: TYPE =
global splines
{naturalUM,cyclicUM,naturalAL,cyclicAL,
special case cubic curves
bezier,bsplineInterp,
local splines
bspline,crspline}; 
TooFewKnots: SIGNAL[numknots: INTEGER] ;
UnknownSpline: SIGNAL[splineType: SplineType] ;
UnmatchedEnds: SIGNAL;
NoInitSplines: SIGNAL;
MakeSpline: PROC [knots: KnotSequence, splineType: SplineType] RETURNS [CoeffsSequence];
DisplayCubic: PROC [coeffs: Coeffs, MoveTo: PROC[ScrPt], DrawTo: PROC[ScrPt],
tol: REAL ¬ 0.5];
END.