#cubic-spline #spline #curve #cubic #spline-interpolation #inversion #graphics

no-std uniform-cubic-splines

简单均匀三次样条评估和反演

9 个版本

新增 0.1.9 2024年8月19日
0.1.8 2023年10月15日
0.1.7 2023年3月19日
0.1.6 2023年2月23日
0.1.1 2020年10月30日

数学 中排名 #205

Download history 1/week @ 2024-05-24 1/week @ 2024-05-31 5/week @ 2024-06-07 4/week @ 2024-06-14 4/week @ 2024-06-21 2/week @ 2024-06-28 3/week @ 2024-07-26 2/week @ 2024-08-02 118/week @ 2024-08-16

每月下载量 123

MIT OR Apache-2.0 OR Zlib

26KB
317

uniform-cubic-splines

均匀三次样条插值与反演。

Documentation Crate

此 crate 支持以下类型的样条

Curve widget with 1D Catmull-Rom spline

使用此 crate 对 1D、2D、3D 等进行插值,并使用具有非均匀节点间距和节点多重性的 1D Catmull-Rom 样条作为曲线小部件(使用 tiny-skia 绘制)。

此 crate 使用泛型,允许对具有某些特质的任何类型进行插值。

例如,您可以使用此 crate 对 1D、2D、3D 等进行样条插值。

[dependencies]
uniform-cubic-splines = { version = "0.1" }

示例

通过组合 spline()spline_inverse(),可以计算一个完整的非均匀横截面的样条

use uniform_cubic_splines::{
    basis::CatmullRom, spline_inverse, spline,
};

// 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, None, None).unwrap();
let y = spline::<CatmullRom, _, _>(v, &knots);

assert!(y - 4.2 < 1e-6);

功能

  • monotonic_check -- 默认情况下启用,如果启用了 unstable 功能,则该检查可以更快地进行。此检查可以在运行时检测 monotonic_check 加速。
  • unstable -- 如果启用了 monotonic_check 功能,则将更快,但需要 nightly 工具链。
  • std -- 如果启用了 monotonic_check 加速,则将在运行时检测到它。

背景

代码是 Rust 对 C++ 源代码中找到的 Open Shading Language 实现的移植。

如果您来自计算机图形/离线渲染中使用的着色语言背景,这个crate应该感觉就像家一样。

依赖项

~180KB