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

Safe HaskellNone
LanguageHaskell98

Geom2D.CubicBezier.Basic

Synopsis

Documentation

data CubicBezier a #

A cubic bezier curve.

Constructors

CubicBezier 

Fields

Instances
Functor CubicBezier # 
Instance details

Defined in Geom2D.CubicBezier.Basic

Methods

fmap :: (a -> b) -> CubicBezier a -> CubicBezier b #

(<$) :: a -> CubicBezier b -> CubicBezier a #

Foldable CubicBezier # 
Instance details

Defined in Geom2D.CubicBezier.Basic

Methods

fold :: Monoid m => CubicBezier m -> m #

foldMap :: Monoid m => (a -> m) -> CubicBezier a -> m #

foldr :: (a -> b -> b) -> b -> CubicBezier a -> b #

foldr' :: (a -> b -> b) -> b -> CubicBezier a -> b #

foldl :: (b -> a -> b) -> b -> CubicBezier a -> b #

foldl' :: (b -> a -> b) -> b -> CubicBezier a -> b #

foldr1 :: (a -> a -> a) -> CubicBezier a -> a #

foldl1 :: (a -> a -> a) -> CubicBezier a -> a #

toList :: CubicBezier a -> [a] #

null :: CubicBezier a -> Bool #

length :: CubicBezier a -> Int #

elem :: Eq a => a -> CubicBezier a -> Bool #

maximum :: Ord a => CubicBezier a -> a #

minimum :: Ord a => CubicBezier a -> a #

sum :: Num a => CubicBezier a -> a #

product :: Num a => CubicBezier a -> a #

Traversable CubicBezier # 
Instance details

Defined in Geom2D.CubicBezier.Basic

Methods

traverse :: Applicative f => (a -> f b) -> CubicBezier a -> f (CubicBezier b) #

sequenceA :: Applicative f => CubicBezier (f a) -> f (CubicBezier a) #

mapM :: Monad m => (a -> m b) -> CubicBezier a -> m (CubicBezier b) #

sequence :: Monad m => CubicBezier (m a) -> m (CubicBezier a) #

GenericBezier CubicBezier # 
Instance details

Defined in Geom2D.CubicBezier.Basic

Methods

degree :: Unbox a => CubicBezier a -> Int #

toVector :: Unbox a => CubicBezier a -> Vector (a, a) #

unsafeFromVector :: Unbox a => Vector (a, a) -> CubicBezier a #

Eq a => Eq (CubicBezier a) # 
Instance details

Defined in Geom2D.CubicBezier.Basic

Show a => Show (CubicBezier a) # 
Instance details

Defined in Geom2D.CubicBezier.Basic

Num a => AffineTransform (CubicBezier a) a # 
Instance details

Defined in Geom2D.CubicBezier.Basic

data QuadBezier a #

A quadratic bezier curve.

Constructors

QuadBezier 

Fields

Instances
Functor QuadBezier # 
Instance details

Defined in Geom2D.CubicBezier.Basic

Methods

fmap :: (a -> b) -> QuadBezier a -> QuadBezier b #

(<$) :: a -> QuadBezier b -> QuadBezier a #

Foldable QuadBezier # 
Instance details

Defined in Geom2D.CubicBezier.Basic

Methods

fold :: Monoid m => QuadBezier m -> m #

foldMap :: Monoid m => (a -> m) -> QuadBezier a -> m #

foldr :: (a -> b -> b) -> b -> QuadBezier a -> b #

foldr' :: (a -> b -> b) -> b -> QuadBezier a -> b #

foldl :: (b -> a -> b) -> b -> QuadBezier a -> b #

foldl' :: (b -> a -> b) -> b -> QuadBezier a -> b #

foldr1 :: (a -> a -> a) -> QuadBezier a -> a #

foldl1 :: (a -> a -> a) -> QuadBezier a -> a #

toList :: QuadBezier a -> [a] #

null :: QuadBezier a -> Bool #

length :: QuadBezier a -> Int #

elem :: Eq a => a -> QuadBezier a -> Bool #

maximum :: Ord a => QuadBezier a -> a #

minimum :: Ord a => QuadBezier a -> a #

sum :: Num a => QuadBezier a -> a #

product :: Num a => QuadBezier a -> a #

Traversable QuadBezier # 
Instance details

Defined in Geom2D.CubicBezier.Basic

Methods

traverse :: Applicative f => (a -> f b) -> QuadBezier a -> f (QuadBezier b) #

sequenceA :: Applicative f => QuadBezier (f a) -> f (QuadBezier a) #

mapM :: Monad m => (a -> m b) -> QuadBezier a -> m (QuadBezier b) #

sequence :: Monad m => QuadBezier (m a) -> m (QuadBezier a) #

GenericBezier QuadBezier # 
Instance details

Defined in Geom2D.CubicBezier.Basic

Methods

degree :: Unbox a => QuadBezier a -> Int #

toVector :: Unbox a => QuadBezier a -> Vector (a, a) #

unsafeFromVector :: Unbox a => Vector (a, a) -> QuadBezier a #

Eq a => Eq (QuadBezier a) # 
Instance details

Defined in Geom2D.CubicBezier.Basic

Methods

(==) :: QuadBezier a -> QuadBezier a -> Bool #

(/=) :: QuadBezier a -> QuadBezier a -> Bool #

Show a => Show (QuadBezier a) # 
Instance details

Defined in Geom2D.CubicBezier.Basic

Num a => AffineTransform (QuadBezier a) a # 
Instance details

Defined in Geom2D.CubicBezier.Basic

Methods

transform :: Transform a -> QuadBezier a -> QuadBezier a #

data AnyBezier a #

A bezier curve of any degree.

Constructors

AnyBezier (Vector (a, a)) 
Instances
GenericBezier AnyBezier # 
Instance details

Defined in Geom2D.CubicBezier.Basic

Methods

degree :: Unbox a => AnyBezier a -> Int #

toVector :: Unbox a => AnyBezier a -> Vector (a, a) #

unsafeFromVector :: Unbox a => Vector (a, a) -> AnyBezier a #

class GenericBezier b where #

Minimal complete definition

degree, toVector, unsafeFromVector

Methods

degree :: Unbox a => b a -> Int #

toVector :: Unbox a => b a -> Vector (a, a) #

unsafeFromVector :: Unbox a => Vector (a, a) -> b a #

Instances
GenericBezier AnyBezier # 
Instance details

Defined in Geom2D.CubicBezier.Basic

Methods

degree :: Unbox a => AnyBezier a -> Int #

toVector :: Unbox a => AnyBezier a -> Vector (a, a) #

unsafeFromVector :: Unbox a => Vector (a, a) -> AnyBezier a #

GenericBezier QuadBezier # 
Instance details

Defined in Geom2D.CubicBezier.Basic

Methods

degree :: Unbox a => QuadBezier a -> Int #

toVector :: Unbox a => QuadBezier a -> Vector (a, a) #

unsafeFromVector :: Unbox a => Vector (a, a) -> QuadBezier a #

GenericBezier CubicBezier # 
Instance details

Defined in Geom2D.CubicBezier.Basic

Methods

degree :: Unbox a => CubicBezier a -> Int #

toVector :: Unbox a => CubicBezier a -> Vector (a, a) #

unsafeFromVector :: Unbox a => Vector (a, a) -> CubicBezier a #

data PathJoin a #

Constructors

JoinLine 
JoinCurve (Point a) (Point a) 
Instances
Functor PathJoin # 
Instance details

Defined in Geom2D.CubicBezier.Basic

Methods

fmap :: (a -> b) -> PathJoin a -> PathJoin b #

(<$) :: a -> PathJoin b -> PathJoin a #

Foldable PathJoin # 
Instance details

Defined in Geom2D.CubicBezier.Basic

Methods

fold :: Monoid m => PathJoin m -> m #

foldMap :: Monoid m => (a -> m) -> PathJoin a -> m #

foldr :: (a -> b -> b) -> b -> PathJoin a -> b #

foldr' :: (a -> b -> b) -> b -> PathJoin a -> b #

foldl :: (b -> a -> b) -> b -> PathJoin a -> b #

foldl' :: (b -> a -> b) -> b -> PathJoin a -> b #

foldr1 :: (a -> a -> a) -> PathJoin a -> a #

foldl1 :: (a -> a -> a) -> PathJoin a -> a #

toList :: PathJoin a -> [a] #

null :: PathJoin a -> Bool #

length :: PathJoin a -> Int #

elem :: Eq a => a -> PathJoin a -> Bool #

maximum :: Ord a => PathJoin a -> a #

minimum :: Ord a => PathJoin a -> a #

sum :: Num a => PathJoin a -> a #

product :: Num a => PathJoin a -> a #

Traversable PathJoin # 
Instance details

Defined in Geom2D.CubicBezier.Basic

Methods

traverse :: Applicative f => (a -> f b) -> PathJoin a -> f (PathJoin b) #

sequenceA :: Applicative f => PathJoin (f a) -> f (PathJoin a) #

mapM :: Monad m => (a -> m b) -> PathJoin a -> m (PathJoin b) #

sequence :: Monad m => PathJoin (m a) -> m (PathJoin a) #

Show a => Show (PathJoin a) # 
Instance details

Defined in Geom2D.CubicBezier.Basic

Methods

showsPrec :: Int -> PathJoin a -> ShowS #

show :: PathJoin a -> String #

showList :: [PathJoin a] -> ShowS #

Num a => AffineTransform (PathJoin a) a # 
Instance details

Defined in Geom2D.CubicBezier.Basic

Methods

transform :: Transform a -> PathJoin a -> PathJoin a #

data ClosedPath a #

Constructors

ClosedPath [(Point a, PathJoin a)] 
Instances
Functor ClosedPath # 
Instance details

Defined in Geom2D.CubicBezier.Basic

Methods

fmap :: (a -> b) -> ClosedPath a -> ClosedPath b #

(<$) :: a -> ClosedPath b -> ClosedPath a #

Foldable ClosedPath # 
Instance details

Defined in Geom2D.CubicBezier.Basic

Methods

fold :: Monoid m => ClosedPath m -> m #

foldMap :: Monoid m => (a -> m) -> ClosedPath a -> m #

foldr :: (a -> b -> b) -> b -> ClosedPath a -> b #

foldr' :: (a -> b -> b) -> b -> ClosedPath a -> b #

foldl :: (b -> a -> b) -> b -> ClosedPath a -> b #

foldl' :: (b -> a -> b) -> b -> ClosedPath a -> b #

foldr1 :: (a -> a -> a) -> ClosedPath a -> a #

foldl1 :: (a -> a -> a) -> ClosedPath a -> a #

toList :: ClosedPath a -> [a] #

null :: ClosedPath a -> Bool #

length :: ClosedPath a -> Int #

elem :: Eq a => a -> ClosedPath a -> Bool #

maximum :: Ord a => ClosedPath a -> a #

minimum :: Ord a => ClosedPath a -> a #

sum :: Num a => ClosedPath a -> a #

product :: Num a => ClosedPath a -> a #

Traversable ClosedPath # 
Instance details

Defined in Geom2D.CubicBezier.Basic

Methods

traverse :: Applicative f => (a -> f b) -> ClosedPath a -> f (ClosedPath b) #

sequenceA :: Applicative f => ClosedPath (f a) -> f (ClosedPath a) #

mapM :: Monad m => (a -> m b) -> ClosedPath a -> m (ClosedPath b) #

sequence :: Monad m => ClosedPath (m a) -> m (ClosedPath a) #

Show a => Show (ClosedPath a) # 
Instance details

Defined in Geom2D.CubicBezier.Basic

Num a => AffineTransform (ClosedPath a) a # 
Instance details

Defined in Geom2D.CubicBezier.Basic

Methods

transform :: Transform a -> ClosedPath a -> ClosedPath a #

data OpenPath a #

Constructors

OpenPath [(Point a, PathJoin a)] (Point a) 
Instances
Functor OpenPath # 
Instance details

Defined in Geom2D.CubicBezier.Basic

Methods

fmap :: (a -> b) -> OpenPath a -> OpenPath b #

(<$) :: a -> OpenPath b -> OpenPath a #

Foldable OpenPath # 
Instance details

Defined in Geom2D.CubicBezier.Basic

Methods

fold :: Monoid m => OpenPath m -> m #

foldMap :: Monoid m => (a -> m) -> OpenPath a -> m #

foldr :: (a -> b -> b) -> b -> OpenPath a -> b #

foldr' :: (a -> b -> b) -> b -> OpenPath a -> b #

foldl :: (b -> a -> b) -> b -> OpenPath a -> b #

foldl' :: (b -> a -> b) -> b -> OpenPath a -> b #

foldr1 :: (a -> a -> a) -> OpenPath a -> a #

foldl1 :: (a -> a -> a) -> OpenPath a -> a #

toList :: OpenPath a -> [a] #

null :: OpenPath a -> Bool #

length :: OpenPath a -> Int #

elem :: Eq a => a -> OpenPath a -> Bool #

maximum :: Ord a => OpenPath a -> a #

minimum :: Ord a => OpenPath a -> a #

sum :: Num a => OpenPath a -> a #

product :: Num a => OpenPath a -> a #

Traversable OpenPath # 
Instance details

Defined in Geom2D.CubicBezier.Basic

Methods

traverse :: Applicative f => (a -> f b) -> OpenPath a -> f (OpenPath b) #

sequenceA :: Applicative f => OpenPath (f a) -> f (OpenPath a) #

mapM :: Monad m => (a -> m b) -> OpenPath a -> m (OpenPath b) #

sequence :: Monad m => OpenPath (m a) -> m (OpenPath a) #

Show a => Show (OpenPath a) # 
Instance details

Defined in Geom2D.CubicBezier.Basic

Methods

showsPrec :: Int -> OpenPath a -> ShowS #

show :: OpenPath a -> String #

showList :: [OpenPath a] -> ShowS #

Semigroup (OpenPath a) # 
Instance details

Defined in Geom2D.CubicBezier.Basic

Methods

(<>) :: OpenPath a -> OpenPath a -> OpenPath a #

sconcat :: NonEmpty (OpenPath a) -> OpenPath a #

stimes :: Integral b => b -> OpenPath a -> OpenPath a #

Monoid (OpenPath a) # 
Instance details

Defined in Geom2D.CubicBezier.Basic

Methods

mempty :: OpenPath a #

mappend :: OpenPath a -> OpenPath a -> OpenPath a #

mconcat :: [OpenPath a] -> OpenPath a #

Num a => AffineTransform (OpenPath a) a # 
Instance details

Defined in Geom2D.CubicBezier.Basic

Methods

transform :: Transform a -> OpenPath a -> OpenPath a #

class AffineTransform a b | a -> b where #

Minimal complete definition

transform

Methods

transform :: Transform b -> a -> a #

Instances
Num a => AffineTransform (Polygon a) a # 
Instance details

Defined in Geom2D

Methods

transform :: Transform a -> Polygon a -> Polygon a #

Num a => AffineTransform (Transform a) a # 
Instance details

Defined in Geom2D

Methods

transform :: Transform a -> Transform a -> Transform a #

Num a => AffineTransform (Point a) a # 
Instance details

Defined in Geom2D

Methods

transform :: Transform a -> Point a -> Point a #

Num a => AffineTransform (ClosedPath a) a # 
Instance details

Defined in Geom2D.CubicBezier.Basic

Methods

transform :: Transform a -> ClosedPath a -> ClosedPath a #

Num a => AffineTransform (OpenPath a) a # 
Instance details

Defined in Geom2D.CubicBezier.Basic

Methods

transform :: Transform a -> OpenPath a -> OpenPath a #

Num a => AffineTransform (PathJoin a) a # 
Instance details

Defined in Geom2D.CubicBezier.Basic

Methods

transform :: Transform a -> PathJoin a -> PathJoin a #

Num a => AffineTransform (QuadBezier a) a # 
Instance details

Defined in Geom2D.CubicBezier.Basic

Methods

transform :: Transform a -> QuadBezier a -> QuadBezier a #

Num a => AffineTransform (CubicBezier a) a # 
Instance details

Defined in Geom2D.CubicBezier.Basic

(Floating a, Eq a) => AffineTransform (Pen a) a # 
Instance details

Defined in Geom2D.CubicBezier.Stroke

Methods

transform :: Transform a -> Pen a -> Pen a #

anyToCubic :: Unbox a => AnyBezier a -> Maybe (CubicBezier a) #

safely convert from AnyBezier to CubicBezier

anyToQuad :: Unbox a => AnyBezier a -> Maybe (QuadBezier a) #

safely convert from AnyBezier to QuadBezier

openPathCurves :: Fractional a => OpenPath a -> [CubicBezier a] #

Return the open path as a list of curves.

closedPathCurves :: Fractional a => ClosedPath a -> [CubicBezier a] #

Return the closed path as a list of curves

curvesToOpen :: [CubicBezier a] -> OpenPath a #

Make an open path from a list of curves. The last control point of each curve except the last is ignored.

curvesToClosed :: [CubicBezier a] -> ClosedPath a #

Make an open path from a list of curves. The last control point of each curve is ignored.

consOpenPath :: Point a -> PathJoin a -> OpenPath a -> OpenPath a #

construct an open path

consClosedPath :: Point a -> PathJoin a -> ClosedPath a -> ClosedPath a #

construct a closed path

openClosedPath :: ClosedPath a -> OpenPath a #

open a closed path

closeOpenPath :: OpenPath a -> ClosedPath a #

close an open path, discarding the last point

bezierParam :: (Ord a, Num a) => a -> Bool #

Return True if the param lies on the curve, iff it's in the interval [0, 1].

bezierParamTolerance :: GenericBezier b => b Double -> Double -> Double #

Convert a tolerance from the codomain to the domain of the bezier curve, by dividing by the maximum velocity on the curve. The estimate is conservative, but holds for any value on the curve.

reorient :: (GenericBezier b, Unbox a) => b a -> b a #

Reorient to the curve B(1-t).

bezierToBernstein :: (GenericBezier b, Unbox a) => b a -> (BernsteinPoly a, BernsteinPoly a) #

Give the bernstein polynomial for each coordinate.

evalBezierDerivs :: (GenericBezier b, Unbox a, Fractional a) => b a -> a -> [Point a] #

Evaluate the bezier and all its derivatives using the modified horner algorithm.

evalBezier :: (GenericBezier b, Unbox a, Fractional a) => b a -> a -> Point a #

Calculate a value on the bezier curve.

evalBezierDeriv :: (Unbox a, Fractional a) => GenericBezier b => b a -> a -> (Point a, Point a) #

Calculate a value and the first derivative on the curve.

findBezierTangent :: DPoint -> CubicBezier Double -> [Double] #

findBezierTangent p b finds the parameters where the tangent of the bezier curve b has the same direction as vector p.

quadToCubic :: Fractional a => QuadBezier a -> CubicBezier a #

Convert a quadratic bezier to a cubic bezier.

bezierHoriz :: CubicBezier Double -> [Double] #

Find the parameter where the bezier curve is horizontal.

bezierVert :: CubicBezier Double -> [Double] #

Find the parameter where the bezier curve is vertical.

findBezierInflection :: CubicBezier Double -> [Double] #

Find inflection points on the curve. Use the formula B_x''(t) * B_y'(t) - B_y''(t) * B_x'(t) = 0 with B_x'(t) the x value of the first derivative at t, B_y''(t) the y value of the second derivative at t

findBezierCusp :: CubicBezier Double -> [Double] #

Find the cusps of a bezier.

bezierArc :: Double -> Double -> CubicBezier Double #

bezierArc startAngle endAngle approximates an arc on the unit circle with a single cubic béziér curve. Maximum deviation is <0.03% for arcs 90° degrees or less.

arcLength :: CubicBezier Double -> Double -> Double -> Double #

@arcLength c t tol finds the arclength of the bezier c at t, within given tolerance tol.

arcLengthParam :: CubicBezier Double -> Double -> Double -> Double #

arcLengthParam c len tol finds the parameter where the curve c has the arclength len, within tolerance tol.

splitBezier :: (Unbox a, Fractional a) => GenericBezier b => b a -> a -> (b a, b a) #

Split a bezier curve into two curves.

bezierSubsegment :: (Ord a, Unbox a, Fractional a) => GenericBezier b => b a -> a -> a -> b a #

Return the subsegment between the two parameters.

splitBezierN :: (Ord a, Unbox a, Fractional a) => GenericBezier b => b a -> [a] -> [b a] #

Split a bezier curve into a list of beziers The parameters should be in ascending order or the result is unpredictable.

colinear :: CubicBezier Double -> Double -> Bool #

Return False if some points fall outside a line with a thickness of the given tolerance.

closest :: CubicBezier Double -> DPoint -> Double -> Double #

Find the closest value on the bezier to the given point, within tolerance. Return the first value found.

findX :: CubicBezier Double -> Double -> Double -> Double #

Find the x value of the cubic bezier. The bezier must be monotonically increasing in the X coordinate.