The nurbs package

[Tags:bsd3, library, test]

Simple NURBS library with support of NURBS, periodic NURBS, knot insertion-removal, NURBS split-joint

 import Control.Lens
 import Linear.NURBS
 import Linear.V2
 import Test.Hspec

 -- | Simple NURBS of degree 3
 test₁ ∷ NURBS V2 Double
 test₁ = nurbs 3 [
   V2 0.0 0.0,
   V2 10.0 0.0,
   V2 10.0 10.0,
   V2 20.0 20.0,
   V2 0.0 20.0,
   V2 (-20.0) 0.0]

 -- | Another NURBS of degree 3
 test₂ ∷ NURBS V2 Double
 test₂ = nurbs 3 [
   V2 (-20.0) 0.0,
   V2 (-20.0) (-20.0),
   V2 0.0 (-40.0),
   V2 20.0 20.0]

 -- | Make test₁ periodic
 testₒ ∷ NURBS V2 Double
 testₒ = set periodic True test₁

 main ∷ IO ()
 main = hspec $ do
   describe "evaluate point" $ do
     it "should start from first control point" $
       (test₁ `eval` 0.0) ≃ (test₁ ^?! wpoints . _head . wpoint)
     it "should end at last control point" $
       (test₁ `eval` 1.0) ≃ (test₁ ^?! wpoints . _last . wpoint)
   describe "insert knot" $ do
     it "should not change nurbs curve" $
       insertKnots [(1, 0.1), (2, 0.3)] test₁ ≃ test₁
   describe "remove knots" $ do
     it "should not change nurbs curve" $
       removeKnots [(1, 0.1), (2, 0.3)] (insertKnots [(1, 0.1), (2, 0.3)] test₁) ≃ test₁
   describe "purge knots" $ do
     it "should not change nurbs curve" $
       purgeKnots (insertKnots [(1, 0.1), (2, 0.6)] test₁) ≃ test₁
   describe "split" $ do
     it "should work as cut" $
       snd (split 0.4 test₁) ≃ cut (Span 0.4 1.0) test₁
   describe "normalize" $ do
     it "should not affect curve" $
       cut (Span 0.2 0.8) test₁ ≃ normalizeKnot (cut (Span 0.2 0.8) test₁)
   describe "joint" $ do
     it "should joint cutted nurbs" $
       uncurry joint (split 0.3 test₁) ≃ Just test₁
     it "should cut jointed nurbs" $
       (cut (Span 0.0 1.0) <$> (test₁ ⊕ test₂)) ≃ Just test₁
     it "should cut jointed nurbs" $
       (cut (Span 1.0 2.0) <$> (test₁ ⊕ test₂)) ≃ Just test₂
   describe "periodic" $ do
     it "can be broken into simple nurbs" $
       breakLoop 0.0 testₒ ≃ testₒ
     it "can be broken in any place" $
       uncurry (flip (⊕)) (split 0.5 (breakLoop 0.0 testₒ)) ≃ Just (breakLoop 0.5 testₒ)

Properties

Versions 0.1.0.0, 0.1.1.0
Dependencies base (>=4.8 && <5), base-unicode-symbols, lens (>=4.12), linear (>=1.19), mtl (>=2.2) [details]
License BSD3
Author Alexanrd `voidex` Ruchkin
Maintainer voidex@live.com
Category Math, Geometry, Linear Algebra
Home page https://github.com/mvoidex/nurbs
Source repository head: git clone git://github.com/mvoidex/nurbs
Uploaded Fri Aug 21 19:43:40 UTC 2015 by AlexandrRuchkin
Updated Fri Aug 21 19:45:49 UTC 2015 by AlexandrRuchkin to revision 1
Distributions NixOS:0.1.1.0
Downloads 212 total (2 in the last 30 days)
Votes
0 []
Status Docs available [build log]
Last success reported on 2015-09-30 [all 3 reports]

Modules

[Index]

Downloads

Maintainer's Corner

For package maintainers and hackage trustees