hgeometry-0.12.0.0: Geometric Algorithms, Data structures, and Data types.
Copyright(C) Frank Staals
Licensesee the LICENSE file
MaintainerFrank Staals
Safe HaskellNone
LanguageHaskell2010

Data.Geometry.BezierSpline

Description

 
Synopsis

Documentation

newtype BezierSpline n d r Source #

Datatype representing a Bezier curve of degree \(n\) in \(d\)-dimensional space.

Constructors

BezierSpline (LSeq (1 + n) (Point d r)) 

Instances

Instances details
Arity d => Functor (BezierSpline n d) Source # 
Instance details

Defined in Data.Geometry.BezierSpline

Methods

fmap :: (a -> b) -> BezierSpline n d a -> BezierSpline n d b #

(<$) :: a -> BezierSpline n d b -> BezierSpline n d a #

Arity d => Foldable (BezierSpline n d) Source # 
Instance details

Defined in Data.Geometry.BezierSpline

Methods

fold :: Monoid m => BezierSpline n d m -> m #

foldMap :: Monoid m => (a -> m) -> BezierSpline n d a -> m #

foldMap' :: Monoid m => (a -> m) -> BezierSpline n d a -> m #

foldr :: (a -> b -> b) -> b -> BezierSpline n d a -> b #

foldr' :: (a -> b -> b) -> b -> BezierSpline n d a -> b #

foldl :: (b -> a -> b) -> b -> BezierSpline n d a -> b #

foldl' :: (b -> a -> b) -> b -> BezierSpline n d a -> b #

foldr1 :: (a -> a -> a) -> BezierSpline n d a -> a #

foldl1 :: (a -> a -> a) -> BezierSpline n d a -> a #

toList :: BezierSpline n d a -> [a] #

null :: BezierSpline n d a -> Bool #

length :: BezierSpline n d a -> Int #

elem :: Eq a => a -> BezierSpline n d a -> Bool #

maximum :: Ord a => BezierSpline n d a -> a #

minimum :: Ord a => BezierSpline n d a -> a #

sum :: Num a => BezierSpline n d a -> a #

product :: Num a => BezierSpline n d a -> a #

Arity d => Traversable (BezierSpline n d) Source # 
Instance details

Defined in Data.Geometry.BezierSpline

Methods

traverse :: Applicative f => (a -> f b) -> BezierSpline n d a -> f (BezierSpline n d b) #

sequenceA :: Applicative f => BezierSpline n d (f a) -> f (BezierSpline n d a) #

mapM :: Monad m => (a -> m b) -> BezierSpline n d a -> m (BezierSpline n d b) #

sequence :: Monad m => BezierSpline n d (m a) -> m (BezierSpline n d a) #

PointFunctor (BezierSpline n d) Source # 
Instance details

Defined in Data.Geometry.BezierSpline

Methods

pmap :: (Point (Dimension (BezierSpline n d r)) r -> Point (Dimension (BezierSpline n d s)) s) -> BezierSpline n d r -> BezierSpline n d s Source #

(Arity d, Eq r) => Eq (BezierSpline n d r) Source # 
Instance details

Defined in Data.Geometry.BezierSpline

Methods

(==) :: BezierSpline n d r -> BezierSpline n d r -> Bool #

(/=) :: BezierSpline n d r -> BezierSpline n d r -> Bool #

(Arity d, Show r) => Show (BezierSpline n d r) Source # 
Instance details

Defined in Data.Geometry.BezierSpline

Methods

showsPrec :: Int -> BezierSpline n d r -> ShowS #

show :: BezierSpline n d r -> String #

showList :: [BezierSpline n d r] -> ShowS #

(Arity n, Arity d, Arbitrary r) => Arbitrary (BezierSpline n d r) Source # 
Instance details

Defined in Data.Geometry.BezierSpline

Methods

arbitrary :: Gen (BezierSpline n d r) #

shrink :: BezierSpline n d r -> [BezierSpline n d r] #

(Fractional r, Arity d, Arity (d + 1), Arity n) => IsTransformable (BezierSpline n d r) Source # 
Instance details

Defined in Data.Geometry.BezierSpline

type NumType (BezierSpline n d r) Source # 
Instance details

Defined in Data.Geometry.BezierSpline

type NumType (BezierSpline n d r) = r
type Dimension (BezierSpline n d r) Source # 
Instance details

Defined in Data.Geometry.BezierSpline

type Dimension (BezierSpline n d r) = d

controlPoints :: Iso (BezierSpline n1 d1 r1) (BezierSpline n2 d2 r2) (LSeq (1 + n1) (Point d1 r1)) (LSeq (1 + n2) (Point d2 r2)) Source #

Bezier control points. With n degrees, there are n+1 control points.

fromPointSeq :: Seq (Point d r) -> BezierSpline n d r Source #

Constructs the Bezier Spline from a given sequence of points.

evaluate :: (Arity d, Ord r, Num r) => BezierSpline n d r -> r -> Point d r Source #

Evaluate a BezierSpline curve at time t in [0, 1]

pre: \(t \in [0,1]\)

split :: forall n d r. (KnownNat n, Arity d, Ord r, Num r) => r -> BezierSpline n d r -> (BezierSpline n d r, BezierSpline n d r) Source #

Split a Bezier curve at time t in [0, 1] into two pieces.

subBezier :: (KnownNat n, Arity d, Ord r, Num r) => r -> r -> BezierSpline n d r -> BezierSpline n d r Source #

Restrict a Bezier curve to th,e piece between parameters t < u in [0, 1].

tangent :: (Arity d, Num r, 1 <= n) => BezierSpline n d r -> Vector d r Source #

Tangent to the bezier spline at the starting point.

approximate :: forall n d r. (KnownNat n, Arity d, Ord r, Fractional r) => r -> BezierSpline n d r -> [Point d r] Source #

Approximate Bezier curve by Polyline with given resolution.

parameterOf :: (Arity d, Ord r, Fractional r) => BezierSpline n d r -> Point d r -> r Source #

Given a point on (or close to) a Bezier curve, return the corresponding parameter value. (For points far away from the curve, the function will return the parameter value of an approximate locally closest point to the input point.)

snap :: (Arity d, Ord r, Fractional r) => BezierSpline n d r -> Point d r -> Point d r Source #

Snap a point close to a Bezier curve to the curve.

pattern Bezier2 :: Point d r -> Point d r -> Point d r -> BezierSpline 2 d r Source #

Quadratic Bezier Spline

pattern Bezier3 :: Point d r -> Point d r -> Point d r -> Point d r -> BezierSpline 3 d r Source #

Cubic Bezier Spline