#线性插值 #插值 #数学 #数值 #外推

lerp

通用线性插值和外推,自动适用于多种数值类型

6 个版本 (重大更新)

0.5.0 2023 年 6 月 17 日
0.4.0 2021 年 1 月 19 日
0.3.0 2020 年 10 月 6 日
0.2.0 2016 年 8 月 6 日
0.1.1 2016 年 8 月 5 日

算法 中排名 420

Download history 668/week @ 2024-03-14 483/week @ 2024-03-21 408/week @ 2024-03-28 448/week @ 2024-04-04 664/week @ 2024-04-11 467/week @ 2024-04-18 672/week @ 2024-04-25 459/week @ 2024-05-02 401/week @ 2024-05-09 497/week @ 2024-05-16 610/week @ 2024-05-23 9028/week @ 2024-05-30 5943/week @ 2024-06-06 6689/week @ 2024-06-13 5956/week @ 2024-06-20 4513/week @ 2024-06-27

每月下载量 24,130
11 crates 中使用

MIT 许可证

12KB
127

Lerp

Build Status

线性插值和迭代,自动适用于大多数与浮点数兼容的类型。

只需知道三个和五个之间的中点是什么?

use lerp::Lerp;

assert_eq!(3.0.lerp(5.0, 0.5), 4.0);

想要在该范围内迭代一些点?

// bring the trait into scope
use lerp::LerpIter;

// iterate and produce four items evenly spaced between 3.0 and 5.0
// note that the default, open iterator does not include both endpoints
// this makes chaining lerping iterators simpler
let items: Vec<_> = 3.0_f64.lerp_iter(5.0, 4).collect();
assert_eq!(vec![3.0, 3.5, 4.0, 4.5], items);

// closed iterators return both ends
assert_eq!(vec![3.0, 5.0], 3.0.lerp_iter_closed(5.0, 2).collect::<Vec<_>>());

当然,它的真正好处是它的推导足够广泛,还包括诸如 num::Complex<T> 这样的类型。如果您有一个数组处理库,并且数组是 T: Add<Output = T> + Mul<F: Float, Output = T>,它也会对它们起作用。

派生 Lerp

除了对单个浮点值起作用外,该库还提供了一个 derive 宏,通过 derive 功能提供,可以自动生成实现。

此 derive 实现将独立插值结构的每个字段,并假设 Lerp 在 Float 类型上有一个泛型实现。如果任何字段仅对浮点值(f32、f64)之一泛型,可以通过 #[lerp(f32)]#[lerp(f64)] 属性分别指定。

如果您希望lerp实现忽略一个字段(或者它不继承lerp),可以使用#[lerp(skip)]#[lerp(ignore)]属性,这将产生一个值,从左侧值不受影响。

并非所有类型都支持这个继承宏。请参见GitHub问题以获取讨论和更多信息。

[dependencies]
lerp = { version = "0.4", features = ["derive"] }
use lerp::Lerp;

#[derive(Lerp, PartialEq, Debug)]
struct Data {
    a: f64,
    b: f64
}

assert_eq!(
    Data { a: 0.0, b: 1.0 }.lerp(Data { a: 1.0, b: 0.0 }, 0.5),
    Data { a: 0.5, b: 0.5 }
);

更多继承示例可以在测试中看到。

使用方法

[dependencies]
lerp = "0.4"

文档

自动构建于Travis:https://coriolinus.github.io/lerp-rs/

依赖

~95–365KB