<> <> <> <> <> DIRECTORY Seq USING [JointSequence, ComplexSequence], Rope USING [ROPE], LSPiece USING [Metrics], Cubic USING [Bezier]; PiecewiseFit: CEDAR DEFINITIONS = { Data: TYPE = REF DataRec; DataRec: TYPE = RECORD [ samples: Seq.ComplexSequence, closed: BOOLEAN, joints: Seq.JointSequence, --[index: NAT, forced: BOOLEAN] tangents: Seq.ComplexSequence --two per potentialKnot; tanIn, tanOut ]; <> <> <> Default: PROC [data: Data]; <> << >> Error: SIGNAL [why: Rope.ROPE]; <<>> Metrics: TYPE = LSPiece.Metrics; <> <> <> <> <> <> <<];>> <= maxItr. The curve is not guaranteed to fit within all the metrics, only the first one to get small enough.>> CubicProc: TYPE = PROC[bezier: Cubic.Bezier, sumErr, maxDev: REAL, iterations: INT] RETURNS[quit: BOOLEAN _ FALSE]; <> FitSpline: PROC [data: Data, metrics: Metrics, outputCubic: CubicProc]; <> GrowSpline: PROC [data: Data, metrics: Metrics, outputCubic: CubicProc, hilight: CubicProc _ NIL]; <> DynSpline: PROC [data: Data, metrics: Metrics, penalty: REAL, trim: BOOLEAN _ TRUE, outputCubic: CubicProc, hilight: CubicProc _ NIL]; <> FitPiece: PROC [data: Data, from, thru: NAT, initFree, finalFree: BOOLEAN _ TRUE, metrics: Metrics, outputCubic: CubicProc]; <> }.