Compare commits
12 Commits
Author | SHA1 | Date | |
---|---|---|---|
b056a4e9a7 | |||
042253ab9c | |||
270f225394 | |||
138828e798 | |||
0ca1c5aa48 | |||
f4c8be33b9 | |||
26bd5c88eb | |||
a4cd49fd20 | |||
09bc7069b2 | |||
8dc8606bf0 | |||
fc2f53200f | |||
b3836975c3 |
22
.github/workflows/ci.yaml
vendored
22
.github/workflows/ci.yaml
vendored
@ -6,38 +6,22 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Build
|
||||
run: |
|
||||
cargo build --verbose --all-features
|
||||
- name: Test
|
||||
run: |
|
||||
cargo test --verbose --all-features
|
||||
run: cargo test --verbose --all-features
|
||||
|
||||
build-windows:
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Build
|
||||
run: |
|
||||
cargo build --verbose --all-features
|
||||
- name: Test
|
||||
run: |
|
||||
cargo test --verbose --all-features
|
||||
run: cargo test --verbose --all-features
|
||||
|
||||
build-macosx:
|
||||
runs-on: macOS-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Rust requirements
|
||||
run: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile=minimal
|
||||
- name: Build
|
||||
run: |
|
||||
. ~/.cargo/env
|
||||
cargo build --verbose --all-features
|
||||
- name: Test
|
||||
run: |
|
||||
. ~/.cargo/env
|
||||
cargo test --verbose --all-features
|
||||
run: cargo test --verbose --all-features
|
||||
|
||||
quality:
|
||||
runs-on: ubuntu-latest
|
||||
|
25
CHANGELOG.md
25
CHANGELOG.md
@ -2,6 +2,9 @@
|
||||
|
||||
<!-- vim-markdown-toc GFM -->
|
||||
|
||||
* [4.1](#41)
|
||||
* [4.0.3](#403)
|
||||
* [4.0.2](#402)
|
||||
* [4.0.1](#401)
|
||||
* [4.0](#40)
|
||||
* [Major changes](#major-changes)
|
||||
@ -40,6 +43,28 @@
|
||||
|
||||
<!-- vim-markdown-toc -->
|
||||
|
||||
# 4.1
|
||||
|
||||
> Mar 28, 2022
|
||||
|
||||
- Support for edition 2021.
|
||||
- Bump `float-cmp` dependency.
|
||||
- Bump `glam` dependency.
|
||||
- Bump `nalgebra` dependency.
|
||||
- Simplify the CI.
|
||||
|
||||
# 4.0.3
|
||||
|
||||
> Jul 11, 2021
|
||||
|
||||
- Add more implementors for `Interpolate`.
|
||||
|
||||
# 4.0.2
|
||||
|
||||
> Jul 11, 2021
|
||||
|
||||
- **Yanked.**
|
||||
|
||||
# 4.0.1
|
||||
|
||||
> Jul 11, 2021
|
||||
|
10
Cargo.toml
10
Cargo.toml
@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "splines"
|
||||
version = "4.0.1"
|
||||
version = "4.1.0"
|
||||
license = "BSD-3-Clause"
|
||||
authors = ["Dimitri Sabadie <dimitri.sabadie@gmail.com>"]
|
||||
description = "Spline interpolation made easy"
|
||||
@ -11,7 +11,7 @@ repository = "https://github.com/phaazon/splines"
|
||||
documentation = "https://docs.rs/splines"
|
||||
readme = "README.md"
|
||||
|
||||
edition = "2018"
|
||||
edition = "2021"
|
||||
|
||||
[badges]
|
||||
travis-ci = { repository = "phaazon/splines", branch = "master" }
|
||||
@ -29,12 +29,12 @@ std = []
|
||||
|
||||
[dependencies]
|
||||
cgmath = { version = ">=0.17, <0.19", optional = true }
|
||||
glam = { version = ">=0.10, <0.18", optional = true }
|
||||
nalgebra = { version = ">=0.21, <0.28", optional = true }
|
||||
glam = { version = ">=0.10, <0.21", optional = true }
|
||||
nalgebra = { version = ">=0.21, <0.31", optional = true }
|
||||
serde = { version = "1", features = ["derive"], optional = true }
|
||||
|
||||
[dev-dependencies]
|
||||
float-cmp = ">=0.6, < 0.9"
|
||||
float-cmp = ">=0.6, < 0.10"
|
||||
serde_json = "1"
|
||||
|
||||
[package.metadata.docs.rs]
|
||||
|
@ -163,5 +163,73 @@ macro_rules! impl_Interpolate {
|
||||
};
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! impl_InterpolateT {
|
||||
($t:ty, $v:ty, $pi:expr) => {
|
||||
impl $crate::interpolate::Interpolate<$t> for $v {
|
||||
fn step(t: $t, threshold: $t, a: Self, b: Self) -> Self {
|
||||
if t < threshold {
|
||||
a
|
||||
} else {
|
||||
b
|
||||
}
|
||||
}
|
||||
|
||||
fn cosine(t: $t, a: Self, b: Self) -> Self {
|
||||
let cos_nt = (1. - (t * $pi).cos()) * 0.5;
|
||||
<Self as $crate::interpolate::Interpolate<$t>>::lerp(cos_nt, a, b)
|
||||
}
|
||||
|
||||
fn lerp(t: $t, a: Self, b: Self) -> Self {
|
||||
let t = Self::from(t);
|
||||
a * (1. - t) + b * t
|
||||
}
|
||||
|
||||
fn cubic_hermite(t: $t, x: ($t, Self), a: ($t, Self), b: ($t, Self), y: ($t, Self)) -> Self {
|
||||
// sampler stuff
|
||||
let t = Self::from(t);
|
||||
let two_t = t * 2.;
|
||||
let three_t = t * 3.;
|
||||
let t2 = t * t;
|
||||
let t3 = t2 * t;
|
||||
let two_t3 = t3 * two_t;
|
||||
let three_t2 = t2 * three_t;
|
||||
|
||||
// tangents
|
||||
let m0 = (b.1 - x.1) / (Self::from(b.0 - x.0));
|
||||
let m1 = (y.1 - a.1) / (Self::from(y.0 - a.0));
|
||||
|
||||
a.1 * (two_t3 - three_t2 + 1.)
|
||||
+ m0 * (t3 - t2 * two_t + t)
|
||||
+ b.1 * (three_t2 - two_t3)
|
||||
+ m1 * (t3 - t2)
|
||||
}
|
||||
|
||||
fn quadratic_bezier(t: $t, a: Self, u: Self, b: Self) -> Self {
|
||||
let t = Self::from(t);
|
||||
let one_t = 1. - t;
|
||||
let one_t2 = one_t * one_t;
|
||||
|
||||
u + (a - u) * one_t2 + (b - u) * t * t
|
||||
}
|
||||
|
||||
fn cubic_bezier(t: $t, a: Self, u: Self, v: Self, b: Self) -> Self {
|
||||
let t = Self::from(t);
|
||||
let one_t = 1. - t;
|
||||
let one_t2 = one_t * one_t;
|
||||
let one_t3 = one_t2 * one_t;
|
||||
let t2 = t * t;
|
||||
|
||||
a * one_t3 + (u * one_t2 * t + v * one_t * t2) * 3. + b * t2 * t
|
||||
}
|
||||
|
||||
fn cubic_bezier_mirrored(t: $t, a: Self, u: Self, v: Self, b: Self) -> Self {
|
||||
<Self as $crate::interpolate::Interpolate<$t>>::cubic_bezier(t, a, u, b + b - v, b)
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
impl_Interpolate!(f32, f32, std::f32::consts::PI);
|
||||
impl_Interpolate!(f64, f64, std::f64::consts::PI);
|
||||
impl_InterpolateT!(f32, f64, std::f32::consts::PI);
|
||||
|
Reference in New Issue
Block a user