iunorm/
fns.rs

1// iunorm::fns
2//
3//!
4//
5
6/// Scales an `f32` `v`alue in between `[min..=max]` to a new range `[a..=b]`.
7///
8/// $$ \large v' = (b - a) \frac{v - min}{max - min} + a $$
9///
10/// # Examples
11/// ```
12/// # use iunorm::scale32;
13/// assert_eq![0.25, scale32(90., 0., 360., 0., 1.)];
14/// assert_eq![-0.5, scale32(90., 0., 360., -1., 1.)];
15///
16/// assert_eq![90., scale32(0.25, 0., 1., 0., 360.)];
17/// assert_eq![90., scale32(-0.5, -1., 1., 0., 360.)];
18/// ```
19#[inline]
20#[must_use]
21pub fn scale32(v: f32, min: f32, max: f32, a: f32, b: f32) -> f32 {
22    (b - a) * (v - min) / (max - min) + a
23}
24
25/// Scales an `f64` `v`alue in between `[min..=max]` to a new range `[a..=b]`.
26///
27/// $$ \large v' = (b - a) \frac{v - min}{max - min} + a $$
28///
29/// # Examples
30/// ```
31/// # use iunorm::scale64;
32/// assert_eq![0.125, scale64(45., 0., 360., 0., 1.)];
33/// assert_eq![-0.75, scale64(45., 0., 360., -1., 1.)];
34///
35/// assert_eq![45., scale64(0.125, 0., 1., 0., 360.)];
36/// assert_eq![45., scale64(-0.75, -1., 1., 0., 360.)];
37/// ```
38#[inline]
39#[must_use]
40pub fn scale64(v: f64, min: f64, max: f64, a: f64, b: f64) -> f64 {
41    (b - a) * (v - min) / (max - min) + a
42}