Add emath::exponential_smooth_factor
This commit is contained in:
parent
4e8a6e3370
commit
6de9d89b65
1 changed files with 22 additions and 0 deletions
|
@ -311,6 +311,28 @@ fn test_normalized_angle() {
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/// Calculate a lerp-factor for exponential smoothing using a time step.
|
||||||
|
///
|
||||||
|
/// * `exponential_smooth_factor(0.90, 1.0, dt)`: reach 90% in 1.0 seconds
|
||||||
|
/// * `exponential_smooth_factor(0.50, 0.2, dt)`: reach 50% in 0.2 seconds
|
||||||
|
///
|
||||||
|
/// Example:
|
||||||
|
/// ```
|
||||||
|
/// # use emath::{lerp, exponential_smooth_factor};
|
||||||
|
/// # let (mut smoothed_value, target_value, dt) = (0.0_f32, 1.0_f32, 0.01_f32);
|
||||||
|
/// let t = exponential_smooth_factor(0.90, 0.2, dt); // reach 90% in 0.2 seconds
|
||||||
|
/// smoothed_value = lerp(smoothed_value..=target_value, t);
|
||||||
|
/// ```
|
||||||
|
pub fn exponential_smooth_factor(
|
||||||
|
reach_this_fraction: f32,
|
||||||
|
in_this_many_seconds: f32,
|
||||||
|
dt: f32,
|
||||||
|
) -> f32 {
|
||||||
|
1.0 - (1.0 - reach_this_fraction).powf(dt / in_this_many_seconds)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
/// An assert that is only active when `emath` is compiled with the `extra_asserts` feature
|
/// An assert that is only active when `emath` is compiled with the `extra_asserts` feature
|
||||||
/// or with the `extra_debug_asserts` feature in debug builds.
|
/// or with the `extra_debug_asserts` feature in debug builds.
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
|
|
Loading…
Reference in a new issue