<<>> <> <> <> <> <> CubicSplines: CEDAR DEFINITIONS = BEGIN X: NAT = 1; Y: NAT = 2; NDIM: NAT = Y; <<>> <> FPCoords: TYPE = ARRAY [X..NDIM] OF REAL; <<>> <> 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 = <> {naturalUM,cyclicUM,naturalAL,cyclicAL, <> bezier,bsplineInterp, <> 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.