nbezier aims to be a general purpose library for working with bezier curves of any degree.
It uses nalgebra (hence the name) to implement a generic BezierCurve
.
This library also provides a non-generic type SimpleCurve
hiding nalgebra's complexity.
SimpleCurve
is optimised for cubic bezier curves while supporting arbitrary degree.
- store curve as list of control points (a matrix' column vector to be precise)
- de Castlejau's Algorithm
- evaluate a point
- split a curve
- compute a curve's polynomial and its derivative
- normal and tangental vectors
- a curve's control points' axis aligned bounding box and convex hull
- raise or reduce a curve's degree
- find a point on a curve
- find all intersection points between two curves
- any suggestions?
Using nalgebra BezierCurve
is generic over its degree.
SimpleCurve
is an enum storing curves of degree 1, 2, 3 and anything above in its 4 variants.
Since these low degrees are their own variant with dedicated type, rust can monomorphize these
computing a lot of "magical constants" at compile time.
Also these degree's variants are stored exclusively on the stack
giving them an enormous performance boost.