úÎgÖbÇK      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJ (=Knot vectors - multisets of points in a 1-dimensional space. KAn empty knot vector -Create a knot vector consisting of one knot. MCreate a knot vector consisting of one knot with the specified multiplicity. <Create a knot vector consisting of all the knots in a list. DCreate a knot vector consisting of all the knots and corresponding  multiplicities in a list. DCreate a knot vector consisting of all the knots and corresponding . multiplicities in a list ordered by the knots' L instance. The ' ordering precondition is not checked. DCreate a knot vector consisting of all the knots and corresponding . multiplicities in a list ordered by the knots' L instance with no 1 duplicates. The preconditions are not checked. CReturns a list of all distinct knots in ascending order along with  their multiplicities. IReturns the number of knots (not necessarily distinct) in a knot vector. 7Returns the number of distinct knots in a knot vector. splitLookup n kts: Split a knot vector kts into 3 parts (pre, mbKt, post)  such that:  All the keys in pre, mbKt& (viewed as a knot vector of either 0  or 1 knot), and post are disjoint and ordered N * Putting the 3 parts back together yields exactly the original knot vector  * The n'#th knot, if one exists, will be in mbKt along with its multiplicity [Returns a list of all knots (not necessarily distinct) of a knot vector in ascending order ]Returns a vector of all knots (not necessarily distinct) of a knot vector in ascending order IReturns a list of all distinct knots of a knot vector in ascending order KReturns a vector of all distinct knots of a knot vector in ascending order M Returns a N( of all distinct knots of a knot vector LLooks up the multiplicity of a knot (which is 0 if the point is not a knot) DReturns a new knot vector with the given knot set to the specified - multiplicity and all other knots unchanged. 0Check the internal consistency of a knot vector !knotSpan kts i j* returns the knot span extending from the i'th knot  to the j' th knot, if i <= j and both knots exist. "knotsInSpan kts i j3 returns the knots in the knot span extending from  the i'th knot to the j'th knot #knotSpans kts width, returns all knot spans of a given width in  ascending order.  For example, knotSpans (mkKnots [1..5]) 2 yields [(1,3), (2,4), (3,5)]. $knotDomain kts p5 returns the domain of a B-spline or NURBS with knot  vector kts and degree p'. This is the subrange spanned by all  except the first and last p) knots. Outside this domain, the spline - does not have a complete basis set. De Boor's algorithm assumes that H the basis functions sum to 1, which is only true on this range, and so 3 this is also precisely the domain on which de Boor's algorithm is valid. %uniform deg nPts (lo,hi)0 constructs a uniformly-spaced knot vector over  the interval from lo to hi+ which, when used to construct a B-spline  with nPts8 control points will yield a clamped spline with degree deg. &  !"#$%&   !"#$%&  !"#$% &OPQR(Insert one knot into a & &OPQRS'(T&OPQROPQR()bSpline kts cps< creates a B-spline with the given knot vector and control N points. The degree is automatically inferred as the difference between the % number of spans in the knot vector (numKnots kts - 1) and the number of  control points ( length cps). U*+,&'()*+,&)'(,*+)*+,-./0VW-./0-./0-./0123JA spline is a piecewise polynomial vector-valued function. The necessary ' and sufficient instance definition is 8. 4CReturns the domain of a spline. In the case of B-splines, this is F the domain on which a spline with this degree and knot vector has a ? full basis set. In other cases, it should be no larger than  splineDomain . toBSpline+, but may be smaller. Within this domain,  5 should agree with 5 . 8 (not F necessarily exactly, but up to reasonable expectations of numerical  accuracy). 56781234567834567812122345678456789A BezierCurve curve on 0 <= x <= 1. X:DConstruct a Bezier curve from a list of control points. The degree = of the curve is one less than the number of control points. Y;+Split and rescale a Bezier curve. Given a 9 b and a point  t, splitBezierCurve b t creates 2 curves (b1, b2) such that (up to . reasonable numerical accuracy expectations): - evalSpline b1 x == evalSpline b (x * t) 1 evalSpline b2 (x-t) == evalSpline b (x * (1-t)) 59:;9:;59:;<GM-Splines are B-splines normalized so that the integral of each basis ' function over the spline domain is 1. Z[\]=mSpline kts cps< creates a M-spline with the given knot vector and control N points. The degree is automatically inferred as the difference between the % number of spans in the knot vector (numKnots kts - 1) and the number of  control points ( length cps). >5<=><=>5<=>?DThe I-Spline basis functions are the integrals of the M-splines, or F alternatively the integrals of the B-splines normalized to the range  [0,1]F. Every I-spline basis function increases monotonically from 0 to 1, I thus it is useful as a basis for monotone functions. An I-Spline curve L is monotone if and only if every non-zero control point has the same sign. ^_`a@iSpline kts cps= creates an I-spline with the given knot vector and control N points. The degree is automatically inferred as the difference between the % number of spans in the knot vector (numKnots kts - 1) and the number of  control points ( length cps). A5?@A?@A5?@A BbCDEIConstructs the homogeneous-coordinates B-spline that corresponds to this  NURBS curve OConstructs the NURBS curve corresponding to a homogeneous-coordinates B-spline FGReturns the domain of a NURBS - that is, the range of parameter values L over which a spline with this degree and knot vector has a full basis set. GHIJ BCDEFGHIJ BDCEFGHIJ BCDEFGHIJ &)123456789:<=>?@A345678129:&)<=>?@Ac    !"#$%&'()*+,-./0 1 2 3456789:;<=>?@ABCDEFGHIJKLMNOPQRSTU VWXYZ[\ > ] B = ^ _`abDcGdefJghiMj splines-0.3Math.Spline.KnotsMath.Spline.BSplineMath.Spline.BSpline.ReferenceMath.Spline.ClassMath.Spline.BezierCurveMath.Spline.MSplineMath.Spline.ISpline Math.NURBSMath.Spline.BSpline.Internal Math.SplineKnotsemptyisEmptyknot multipleKnotmkKnotsfromList fromAscListfromDistinctAscListfromMap fromVectortoListtoVectortoMapnumKnotsnumDistinctKnotsmaxMultiplicity lookupKnotlookupDistinctKnot splitLookup dropKnots takeKnots splitKnotsAttakeDistinctKnotsdropDistinctKnotssplitDistinctKnotsAtknots knotsVector distinctKnotsdistinctKnotsVectorknotMultiplicitysetKnotMultiplicityvalidknotSpan knotsInSpan knotSpans knotDomainuniformBSpline evalBSpline insertKnotbSplinedifferentiateBSplineintegrateBSpline splitBSplinebasesbasisFunctionsbasisPolynomialsbasisPolynomialsAt ControlPoints controlPointsSpline splineDomain evalSpline splineDegree knotVector toBSpline BezierCurve bezierCurvesplitBezierCurveMSplinemSpline toMSplineISplineiSpline toISplineNURBStoNURBSnurbs evalNURBS nurbsDomain nurbsDegreenurbsKnotVectornurbsControlPoints splitNURBSbase GHC.ClassesOrddistinctKnotsSetcontainers-0.4.1.0Data.SetSetdegreemapControlPointsdeBoor maybeSplinespans spanDiffs deCasteljau mSplineDegreemSplineKnotVectormSplineControlPoints iSplineDegreeiSplineKnotVectoriSplineControlPoints