15 Commits
4.1 ... 4.1.1

Author SHA1 Message Date
d9770ad60b Merge pull request #90 from phaazon/release/4.1.1
Release/4.1.1
2022-07-27 00:49:00 +02:00
3dfea81856 Update changelog. 2022-07-27 00:42:42 +02:00
604dcc6e27 Increment version number. 2022-07-27 00:42:30 +02:00
8c952ae242 Merge pull request #86 from hokwangchoi/master
Fix cubic_hermite interpolation
2022-07-27 00:42:23 +02:00
b52643b5d7 Merge pull request #85 from phaazon/dependabot/cargo/master/nalgebra-gte-0.21-and-lt-0.32
Update nalgebra requirement from >=0.21, <0.31 to >=0.21, <0.32
2022-07-27 00:41:30 +02:00
dc6ef0a5cc Update nalgebra requirement from >=0.21, <0.31 to >=0.21, <0.32
Updates the requirements on [nalgebra](https://github.com/dimforge/nalgebra) to permit the latest version.
- [Release notes](https://github.com/dimforge/nalgebra/releases)
- [Changelog](https://github.com/dimforge/nalgebra/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/dimforge/nalgebra/compare/v0.21.0...v0.31.0)

---
updated-dependencies:
- dependency-name: nalgebra
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-26 22:10:25 +00:00
043a8608c3 Merge pull request #88 from phaazon/dependabot/cargo/master/glam-gte-0.10-and-lt-0.22
Update glam requirement from >=0.10, <0.21 to >=0.10, <0.22
2022-07-27 00:09:22 +02:00
295043e5af rustfmt 2022-07-27 00:08:26 +02:00
1c249215c9 Merge pull request #89 from timethy/interpolation-made-fast
Interpolation made fast
2022-07-27 00:02:17 +02:00
5a7e74d79c Binary Search to achieve promised logarithmic running time for sample (instead of linear!)
(cherry picked from commit ffcf289f713d5d92a74038ffa2fb6059d9995175)
2022-06-23 16:58:30 +02:00
2012105a72 Update glam requirement from >=0.10, <0.21 to >=0.10, <0.22
Updates the requirements on [glam](https://github.com/bitshifter/glam-rs) to permit the latest version.
- [Release notes](https://github.com/bitshifter/glam-rs/releases)
- [Changelog](https://github.com/bitshifter/glam-rs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/bitshifter/glam-rs/compare/0.10.0...0.21.1)

---
updated-dependencies:
- dependency-name: glam
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-23 07:31:20 +00:00
f25ebb2c64 remove unfinished test 2022-06-07 12:50:18 -04:00
e9c1de389f scale tangent 2022-06-07 12:47:17 -04:00
bdeaefd9f9 fix cubic_hermite coefficients & powers 2022-06-07 12:01:25 -04:00
ace0f4ec50 Merge pull request #84 from phaazon/release/4.1
4.1.0.
2022-03-28 11:43:48 +02:00
4 changed files with 34 additions and 37 deletions

View File

@ -2,6 +2,7 @@
<!-- vim-markdown-toc GFM -->
* [4.1.1](#411)
* [4.1](#41)
* [4.0.3](#403)
* [4.0.2](#402)
@ -43,6 +44,17 @@
<!-- vim-markdown-toc -->
# 4.1.1
> Jul 27, 2022
- Internal enhancement of sampling splines by looking for control points. That brings the lookup from _O(1)_ to
_O(log(N))_. That is super embarassing because it should have been the default from the very first commit. Sorry
about that.
- Fix hermite cubic interpolation.
- Add support for `glam-0.21`.
- Add support for `nalgebra-0.31`.
# 4.1
> Mar 28, 2022

View File

@ -1,6 +1,6 @@
[package]
name = "splines"
version = "4.1.0"
version = "4.1.1"
license = "BSD-3-Clause"
authors = ["Dimitri Sabadie <dimitri.sabadie@gmail.com>"]
description = "Spline interpolation made easy"
@ -29,8 +29,8 @@ std = []
[dependencies]
cgmath = { version = ">=0.17, <0.19", optional = true }
glam = { version = ">=0.10, <0.21", optional = true }
nalgebra = { version = ">=0.21, <0.31", optional = true }
glam = { version = ">=0.10, <0.22", optional = true }
nalgebra = { version = ">=0.21, <0.32", optional = true }
serde = { version = "1", features = ["derive"], optional = true }
[dev-dependencies]

View File

@ -127,15 +127,16 @@ macro_rules! impl_Interpolate {
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;
let two_t3 = t2 * two_t;
let two_t2 = t * two_t;
let three_t2 = t * three_t;
// tangents
let m0 = (b.1 - x.1) / (b.0 - x.0);
let m1 = (y.1 - a.1) / (y.0 - a.0);
let m0 = (b.1 - x.1) / (b.0 - x.0) * (b.0 - a.0);
let m1 = (y.1 - a.1) / (y.0 - a.0) * (b.0 - a.0);
a.1 * (two_t3 - three_t2 + 1.)
+ m0 * (t3 - t2 * two_t + t)
+ m0 * (t3 - two_t2 + t)
+ b.1 * (three_t2 - two_t3)
+ m1 * (t3 - t2)
}
@ -192,15 +193,16 @@ macro_rules! impl_InterpolateT {
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;
let two_t3 = t2 * two_t;
let two_t2 = t * two_t;
let three_t2 = t * 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));
let m0 = (b.1 - x.1) / (Self::from(b.0 - x.0)) * (Self::from(b.0 - a.0));
let m1 = (y.1 - a.1) / (Self::from(y.0 - a.0)) * (Self::from(b.0 - a.0));
a.1 * (two_t3 - three_t2 + 1.)
+ m0 * (t3 - t2 * two_t + t)
+ m0 * (t3 - two_t2 + t)
+ b.1 * (three_t2 - two_t3)
+ m1 * (t3 - t2)
}

View File

@ -318,37 +318,20 @@ pub struct KeyMut<'a, T, V> {
}
// Find the lower control point corresponding to a given time.
// It has the property to have a timestamp smaller or equal to t
fn search_lower_cp<T, V>(cps: &[Key<T, V>], t: T) -> Option<usize>
where
T: PartialOrd,
{
let mut i = 0;
let len = cps.len();
if len < 2 {
return None;
}
loop {
let cp = &cps[i];
let cp1 = &cps[i + 1];
if t >= cp1.t {
if i >= len - 2 {
return None;
}
i += 1;
} else if t < cp.t {
if i == 0 {
return None;
}
i -= 1;
} else {
break; // found
}
match cps.binary_search_by(|key| key.t.partial_cmp(&t).unwrap()) {
Err(i) if i >= len => None,
Err(i) if i == 0 => None,
Err(i) => Some(i - 1),
Ok(i) if i == len - 1 => None,
Ok(i) => Some(i),
}
Some(i)
}