nurbs: NURBS
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ₒ)
Versions [faq] | 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 | BSD-3-Clause |
Author | Alexanrd `voidex` Ruchkin |
Maintainer | voidex@live.com |
Revised | Revision 1 made by AlexandrRuchkin at 2015-08-21T19:45:49Z |
Category | Math, Geometry, Linear Algebra |
Home page | https://github.com/mvoidex/nurbs |
Source repo | head: git clone git://github.com/mvoidex/nurbs |
Uploaded | by AlexandrRuchkin at 2015-08-21T19:43:40Z |
Distributions | NixOS:0.1.1.0 |
Downloads | 1453 total (5 in the last 30 days) |
Rating | (no votes yet) [estimated by Bayesian average] |
Your Rating | |
Status | Docs available [build log] Last success reported on 2015-09-30 [all 3 reports] |
Downloads
- nurbs-0.1.1.0.tar.gz [browse] (Cabal source package)
- Package description (revised from the package)
Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.