# bspline

A library for computing B-spline interpolating curves on generic control points. bspline can be used to evaluate B-splines of varying orders on any type that can be linearly interpolated, ranging from floats, positions, RGB colors to transformation matrices and so on.

The bspline logo was generated using this library with a cubic B-spline in 2D for the positioning of the curve and a quadratic B-spline in RGB space to color it (check out the logo example!). Other much simpler examples of 1D and 2D quadratic, cubic and quartic B-splines can also be found in the examples.

# 1D Example

This example shows how to create the 1D cardinal cubic B-spline example shown on Wikipedia's B-splines page. For examples of evaluating the spline to an image and saving the output see the examples.

```let points = vec![0.0, 0.0, 0.0, 6.0, 0.0, 0.0, 0.0];
let knots = vec![-2.0, -2.0, -2.0, -2.0, -1.0, 0.0, 1.0, 2.0, 2.0, 2.0, 2.0];
let degree = 3;
let spline = bspline::BSpline::new(degree, points, knots);```

The library assumes you are familiar at some level with how B-splines work, e.g. how control points and knots and effect the curve produced. No interactive editor is provided (at least currently). Some good places to start reading about B-splines to effectively use this library can be found below.

## Structs

 BSpline Represents a B-spline curve that will use polynomials of the specified degree to interpolate between the control points given the knots.

## Traits

 Interpolate The interpolate trait is used to linearly interpolate between two types (or in the case of Quaternions, spherically linearly interpolate). The B-spline curve uses this trait to compute points on the curve for the given parameter value.