Expand description
Uniform cubic spline interpolation & inversion.
This crate supports the following types of splines:
- B-spline
- Bezier
- Catmull-Rom
- Hermite
- Linear
- Power
The crate uses generics to allow interpolation of any type for which certain traits are defined.
I.e. you can use this crate to interpolate splines in 1D, 2D, 3D, etc.
§Example
Using a combination of spline()
and spline_inverse()
it is possible
to compute a full spline-with-non-uniform-abscissæ:
use uniform_cubic_splines::prelude::*;
// We want to evaluate the spline at knot value 0.3.
let x = 0.3;
// The first and last points are never interpolated.
let knot_spacing = [0.0, 0.0, 0.1, 0.3, 1.0, 1.0];
let knots = [0.0, 0.0, 1.3, 4.2, 3.2, 3.2];
let v = spline_inverse::<CatmullRom, _>(x, &knot_spacing).unwrap();
let y = spline::<CatmullRom, _, _>(v, &knots);
assert!(y - 4.2 < 1e-6);
§Background
The code is a Rust port of the resp. implementations found in the Open Shading Language C++ source.
If you come from a background of computer graphics/shading languages used in offline rendering this crate should feel like home.
§no-std
The crate does not depend on the standard library (i.e. is marked no_std
).
§Cargo Features
monotonic_check
— Thespline_inverse()
/spline_inverse_with()
code will check if the knot vector is monotonic (enabled by default).
Modules§
Macros§
Structs§
- Spline
Inverse Options - Options for
spline_inverse_with()
function.
Functions§
- is_
len_ ok Deprecated - Returns
true
if aknots
slice you want to feed intospline()
has the correct length for the choosenBasis
. - spline
- As
x
varies from0
to1
, this function returns the value of a cubic interpolation of uniformly spacedknots
. - spline_
inverse - Computes the inverse of the
spline()
function. - spline_
inverse_ with - Computes the inverse of the
spline()
function with control over iterations & precision via resp.SplineInverseOptions
.