nurbs-0.1.0.0: NURBS

Safe HaskellNone
LanguageHaskell2010

Linear.NURBS

Synopsis

Documentation

binomial :: Integral a => a -> a -> a Source

size :: (Additive f, Floating a, Foldable f) => f a -> a Source

data Weight f a Source

Constructors

Weight (f a) a 

Instances

Functor f => Functor (Weight f) Source 
Foldable f => Foldable (Weight f) Source 
Affine f => Affine (Weight f) Source 
Metric f => Metric (Weight f) Source 
Additive f => Additive (Weight f) Source 
(Eq a, Eq (f a)) => Eq (Weight f a) Source 
(Ord a, Ord (f a)) => Ord (Weight f a) Source 
(Read a, Read (f a)) => Read (Weight f a) Source 
(Show a, Show (f a)) => Show (Weight f a) Source 
(Metric f, Ord a, Floating a, SimEq a) => SimEq (Weight f a) Source 
type Diff (Weight f) = Weight (Diff f) Source 

ofWeight :: Additive f => f a -> a -> Weight f a Source

wpoint :: (Additive f, Additive g, Fractional a) => Lens (Weight f a) (Weight g a) (f a) (g a) Source

data Span a Source

Constructors

Span 

Fields

_spanStart :: a
 
_spanEnd :: a
 

Instances

Eq a => Eq (Span a) Source 
Ord a => Ord (Span a) Source 
Read a => Read (Span a) Source 
Show a => Show (Span a) Source 

spanStart :: forall a. Lens' (Span a) a Source

spanEnd :: forall a. Lens' (Span a) a Source

spanId :: (Ord a, Num a) => a -> Span a -> a Source

Piecewise constant function, returns 1 in span, 0 otherwise

grow :: (Ord a, Fractional a) => a -> Span a -> a Source

Grow within span from 0 to 1

fall :: (Ord a, Fractional a) => a -> Span a -> a Source

Fall function, opposite to grow

coords :: (Eq a, Fractional a) => Span a -> Iso' a a Source

Map value to span coordinates, span start mapped to 0, end to 1

rangeSpan :: [a] -> Span a Source

Make span from knot vector

mergeSpan :: Ord a => Span a -> Span a -> Span a Source

Merge spans

knotSpans :: Int -> [a] -> [Span a] Source

Generate knot spans of degree

growSpans :: Int -> [a] -> [Span a] Source

Generate drow spans of degree

fallSpans :: Int -> [a] -> [Span a] Source

Generate fall spans of degree

data KnotData a Source

Knot evaluation data

Constructors

KnotData a [(Span a, a)] 

Instances

Eq a => Eq (KnotData a) Source 
Ord a => Ord (KnotData a) Source 
Read a => Read (KnotData a) Source 
Show a => Show (KnotData a) Source 

makeData :: (Ord a, Num a) => [a] -> a -> KnotData a Source

Make initial knot data

iterData :: (Ord a, Fractional a) => KnotData a -> KnotData a Source

Eval basis function for next degree

evalData :: (Ord a, Fractional a) => Int -> KnotData a -> KnotData a Source

Eval for n degree

basis :: (Ord a, Fractional a) => [a] -> Int -> Int -> a -> a Source

Nᵢ,ₙ — n-degree basis function for i-th control point

rbasis :: (Ord a, Fractional a) => [a] -> [a] -> Int -> Int -> a -> a Source

Rᵢ,ₙ — n-degree rational basis function for i-th control point

data NURBS f a Source

Constructors

NURBS [Weight f a] [a] 

Instances

(Eq a, Eq (f a)) => Eq (NURBS f a) Source 
(Ord a, Ord (f a)) => Ord (NURBS f a) Source 
(Read a, Read (f a)) => Read (NURBS f a) Source 
(Show a, Show (f a)) => Show (NURBS f a) Source 
(Metric f, Ord a, Floating a, SimEq (f a)) => SimEq (NURBS f a) Source 

eval :: (Additive f, Ord a, Fractional a) => NURBS f a -> a -> f a Source

Evaluate nurbs point

uniformKnot :: Fractional a => Int -> Int -> [a] Source

Generate knot of degree for points

wpoints :: Fractional a => Lens (NURBS f a) (NURBS g a) [Weight f a] [Weight g a] Source

knotVector :: Eq a => Lens' (NURBS f a) [a] Source

iknotVector :: (Eq a, Fractional a) => Lens' (NURBS f a) [a] Source

knotSpan :: (Eq a, Fractional a) => Lens' (NURBS f a) (Span a) Source

normalizeKnot :: (Eq a, Fractional a) => NURBS f a -> NURBS f a Source

nurbs :: (Additive f, Fractional a) => Int -> [f a] -> NURBS f a Source

Make nurbs of degree from points

wnurbs :: (Additive f, Fractional a) => Int -> [Weight f a] -> NURBS f a Source

Make nurbs of degree from weighted points

insertKnot :: (Additive f, Ord a, Fractional a) => a -> NURBS f a -> NURBS f a Source

Insert knot

insertKnots :: (Additive f, Ord a, Fractional a) => [(Int, a)] -> NURBS f a -> NURBS f a Source

Insert knots

appendPoint :: (Eq a, Fractional a) => a -> Weight f a -> NURBS f a -> NURBS f a Source

Append point

prependPoint :: (Eq a, Fractional a) => a -> Weight f a -> NURBS f a -> NURBS f a Source

Prepend point

split :: (Additive f, Ord a, Fractional a) => a -> NURBS f a -> (NURBS f a, NURBS f a) Source

Split NURBS

cut :: (Additive f, Ord a, Fractional a) => Span a -> NURBS f a -> NURBS f a Source

Cut NURBS

removeKnot :: (Foldable f, Additive f, Ord a, Floating a, SimEq (NURBS f a)) => a -> NURBS f a -> Maybe (NURBS f a) Source

Remove knot

removeKnot_ :: (Foldable f, Additive f, Ord a, Floating a, SimEq (NURBS f a)) => a -> NURBS f a -> NURBS f a Source

Try remove knot

removeKnots :: (Foldable f, Additive f, Ord a, Floating a, SimEq (NURBS f a)) => [(Int, a)] -> NURBS f a -> NURBS f a Source

Remove knots

purgeKnots :: (Foldable f, Additive f, Ord a, Floating a, SimEq (NURBS f a)) => NURBS f a -> NURBS f a Source

Try remove knots

ndist :: (Metric f, Ord a, Floating a) => f a -> f a -> a Source

class SimEq a where Source

Minimal complete definition

Nothing

Methods

(≃) :: a -> a -> Bool Source

(≄) :: a -> a -> Bool Source

Instances

(Ord a, Floating a) => SimEq a Source 
(Metric f, Ord a, Floating a, SimEq a) => SimEq (f a) Source 
SimEq a => SimEq (Maybe a) Source 
(Metric f, Ord a, Floating a, SimEq a) => SimEq (Weight f a) Source 
(Metric f, Ord a, Floating a, SimEq (f a)) => SimEq (NURBS f a) Source 

joint :: (Ord a, Num a, Floating a, Foldable f, Metric f, SimEq (Weight f a), SimEq (NURBS f a)) => NURBS f a -> NURBS f a -> Maybe (NURBS f a) Source

(⊕) :: (Ord a, Num a, Floating a, Foldable f, Metric f, SimEq (Weight f a), SimEq (NURBS f a)) => NURBS f a -> NURBS f a -> Maybe (NURBS f a) Source