# 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 | 1433 total (4 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'.