#bezier #geometry

nbezier

Bezier curve library based on nalgebra

1 unstable release

0.2.1 Sep 27, 2022

#25 in #bezier

MIT license

76KB
1.5K SLoC

nbezier

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.

Current Features

  • 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

Experimental Features

  • find a point on a curve
  • find all intersection points between two curves

Planned Features

  • any suggestions?

How is SimpleCurve optimised?

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.

Dependencies

~3MB
~57K SLoC