# Capstan ![GitHub Rust CI](https://github.com/lancelet/capstan/workflows/Rust/badge.svg) [![Codecov.io](https://codecov.io/gh/lancelet/capstan/branch/main/graph/badge.svg)](https://codecov.io/gh/lancelet/capstan) [![Crates.io](https://img.shields.io/crates/v/capstan.svg)](https://crates.io/crates/capstan) [![Docs.rs](https://docs.rs/capstan/badge.svg)](https://docs.rs/capstan) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) NURBS utilities in Rust. ## NURBS Curve Evaluation Currently, only NURBS curve evaluation is complete. The evaluation uses a naive version of the de Boor algorithm. With this, it's possible to evaluate the 3D coordinates of a NURBS curve at any parameter value. NURBS can represent conics with floating-point precision. This image shows a tesselated NURBS circle on the left and an SVG circle on the right: NURBS are a generalization of Bézier curves, so they can exactly represent any order of Bézier curve. The image below shows an SVG cubic Bézier with a loop on the right and a tesselated NURBS representation on the left: NURBS can represent multiple Bézier curve segments in a single curve. The example below shows an outline of the Egyptian "reed leaf" hieroglyph (Gardiner sign M17). This curve is constructed from 2 line segments and 4 cubic Bézier curves, all of which can be represented as a single closed NURBS curve: ## NURBS Curve Representation The library uses the "Rhino" form of NURBS curves, where there are two fewer knots than in "traditional" NURBS.