DIRECTORY DynFit, Vector, Seq, Filters; FilterImpl: CEDAR PROGRAM IMPORTS DynFit EXPORTS Filters = { AveFilter: PUBLIC PROC[samples: Seq.ComplexSequence, closed: BOOLEAN] RETURNS [Seq.ComplexSequence]= { length: NAT _ samples.length; prev,current,next: Vector.Vec; prev _ IF closed THEN samples[length-1] ELSE samples[0]; FOR i: NAT IN [0..length) DO current _ samples[i]; IF (closed AND i=length-1) THEN next _ samples[0] ELSE {IF i<= length-1 THEN next _ samples[i+1]}; samples[i].x _ (prev.x+2*current.x+next.x)/4; samples[i].y _ (prev.y+2*current.y+next.y)/4; prev _ current; ENDLOOP; RETURN[samples]; }; AveFilterLeavingCorners: PUBLIC PROC[samples: Seq.ComplexSequence, closed: BOOLEAN, corners: Seq.NatSequence _ NIL] RETURNS [Seq.ComplexSequence]= { length: NAT _ samples.length; nextCorner: NAT _ 0; prev,current,next: Vector.Vec; prev _ IF closed THEN samples[length-1] ELSE samples[0]; FOR i: NAT IN [0..length) DO current _ samples[i]; IF (closed AND i=length-1) THEN next _ samples[0] ELSE {IF i<= length-1 THEN next _ samples[i+1]}; IF corners#NIL AND i = corners[nextCorner] THEN nextCorner _ nextCorner+1 ELSE { samples[i].x _ (prev.x+2*current.x+next.x)/4; samples[i].y _ (prev.y+2*current.y+next.y)/4; }; prev _ current; ENDLOOP; RETURN[samples]; }; Dynfilter: PUBLIC PROCEDURE[samples: Seq.ComplexSequence, closed: BOOLEAN, tolerance: REAL] RETURNS [new: Seq.ComplexSequence, totalBadness: REAL] = { segments: DynFit.Segments; newSamples,z: Seq.ComplexSequence; len: NAT; IF closed THEN { z _ NEW[Seq.ComplexSequenceRec[samples.length+1]]; FOR i: NAT IN[0..z.length) DO z[i] _ samples[i]; ENDLOOP; } ELSE z _ samples; [segments,totalBadness] _ DynFit.FitSegments[z,tolerance]; [newSamples,len] _ DynFit.SampleSegments[segments,samples]; new _ NEW [Seq.ComplexSequenceRec[len]]; FOR i: NAT IN [0..len) DO new[i] _ newSamples[i]; ENDLOOP; RETURN[new, totalBadness]; }; }. ŒFilterImpl.mesa Last modified by Maureen Stone March 21, 1984 8:04:55 pm PST Last modified by Michael Plass August 20, 1982 2:55 pm Êˆ˜Jšœ™Jšœ<™