cubicbezier-0.4.0.1: Efficient manipulating of 2D cubic bezier curves.

Safe HaskellNone
LanguageHaskell98

Math.BernsteinPoly

Description

Algebra on polynomials in the Bernstein form. It is based on the paper /Algebraic manipulation in the Bernstein form made simple via convolutions/ by J. Sanchez-Reyes. It's an efficient implementation using the scaled basis, and using ghc rewrite rules to eliminate intermediate polynomials.

Synopsis

Documentation

data BernsteinPoly a Source

Constructors

BernsteinPoly 

Fields

bernsteinCoeffs :: Vector a
 

Instances

(Show a, Unbox a) => Show (BernsteinPoly a) 

bernsteinSubsegment :: (Unbox a, Ord a, Fractional a) => BernsteinPoly a -> a -> a -> BernsteinPoly a Source

Return the subsegment between the two parameters.

listToBernstein :: (Unbox a, Num a) => [a] -> BernsteinPoly a Source

Create a bernstein polynomail from a list of coëfficients.

zeroPoly :: (Num a, Unbox a) => BernsteinPoly a Source

The constant zero.

(~*) :: (Unbox a, Fractional a) => BernsteinPoly a -> BernsteinPoly a -> BernsteinPoly a infixl 7 Source

Multiply two bernstein polynomials using convolution. The final degree will be the sum of either degrees. This operation takes O((n+m)^2) with n and m the degree of the beziers. Note that convolution can be done in O(n log n) using the FFT, which may be faster for large polynomials.

(*~) :: (Unbox a, Num a) => a -> BernsteinPoly a -> BernsteinPoly a infixl 7 Source

Scale a bernstein polynomial by a constant.

(~+) :: (Unbox a, Fractional a) => BernsteinPoly a -> BernsteinPoly a -> BernsteinPoly a infixl 6 Source

Sum two bernstein polynomials. The final degree will be the maximum of either degrees.

(~-) :: (Unbox a, Fractional a) => BernsteinPoly a -> BernsteinPoly a -> BernsteinPoly a infixl 6 Source

Subtract two bernstein polynomials. The final degree will be the maximum of either degrees.

bernsteinSplit :: (Unbox a, Num a) => BernsteinPoly a -> a -> (BernsteinPoly a, BernsteinPoly a) Source

Split a bernstein polynomial

bernsteinEval :: (Unbox a, Fractional a) => BernsteinPoly a -> a -> a Source

Evaluate the bernstein polynomial using the horner rule adapted for bernstein polynomials.

bernsteinEvalDeriv :: (Unbox t, Fractional t) => BernsteinPoly t -> t -> (t, t) Source

Evaluate the bernstein polynomial and first derivative

binCoeff :: (Num a, Unbox a) => Int -> Vector a Source

Give the binomial coefficients of degree n.

convolve :: (Unbox a, Num a) => Vector a -> Vector a -> Vector a Source

Calculate the convolution of two vectors.

bernsteinEvalDerivs :: (Unbox t, Fractional t) => BernsteinPoly t -> t -> [t] Source

Evaluate the bernstein polynomial and its derivatives.

bernsteinDeriv :: (Unbox a, Num a) => BernsteinPoly a -> BernsteinPoly a Source

Find the derivative of a bernstein polynomial.