More cleanup
This commit is contained in:
parent
7890107832
commit
1dfc5bad0e
|
|
@ -548,18 +548,20 @@ impl Rect {
|
||||||
|
|
||||||
pub fn x(&self, u: f32) -> f32 { self.fy().x(u) }
|
pub fn x(&self, u: f32) -> f32 { self.fy().x(u) }
|
||||||
pub fn u(&self, x: f32) -> f32 { self.fy().u(x) }
|
pub fn u(&self, x: f32) -> f32 { self.fy().u(x) }
|
||||||
pub fn dx(&self, u: f32, du: f32) -> f32 { self.fy().dx(u, du) }
|
pub fn dx(&self, u: f32, du: f32) -> f32 { self.fy().dx(u) * du }
|
||||||
pub fn du(&self, x: f32, dx: f32) -> f32 { self.fy().du(x, dx) }
|
pub fn du(&self, x: f32, dx: f32) -> f32 { self.fy().du(x) * dx }
|
||||||
}
|
}
|
||||||
|
|
||||||
mod fns {
|
mod fns {
|
||||||
|
use crate::FloatExt2;
|
||||||
|
|
||||||
pub struct RectX {
|
pub struct RectX {
|
||||||
pub min: f32,
|
pub min: f32,
|
||||||
pub max: f32,
|
pub max: f32,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl RectX {
|
impl RectX {
|
||||||
pub fn value(&self, x: f32) -> f32 { ((x.abs() - self.min) / (self.max - self.min)).clamp(0.0, 1.0) }
|
pub fn value(&self, x: f32) -> f32 { (self.min, self.max).inverse_lerp(x.abs()).clamp(0.0, 1.0) }
|
||||||
pub fn derivative(&self, x: f32) -> f32 { if x.abs() > self.min && x.abs() < self.max { x.signum() / (self.max - self.min) } else { 0.0 } }
|
pub fn derivative(&self, x: f32) -> f32 { if x.abs() > self.min && x.abs() < self.max { x.signum() / (self.max - self.min) } else { 0.0 } }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -569,19 +571,17 @@ mod fns {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl RectY {
|
impl RectY {
|
||||||
fn γ(&self) -> f32 { self.external / self.internal }
|
fn a(&self) -> f32 { -(self.external - self.internal) / self.internal.powi(2) }
|
||||||
fn a(&self) -> f32 { -(self.γ() - 1.0) / self.internal }
|
fn b(&self) -> f32 { 2.0 * self.external / self.internal - 1.0 }
|
||||||
fn b(&self) -> f32 { 2.0 * self.γ() - 1.0 }
|
fn root(&self, x: f32) -> f32 { (self.b().powi(2) + 4.0 * self.a() * x.abs()).sqrt() }
|
||||||
|
|
||||||
fn root(&self, x: f32) -> f32 { (self.b().powi(2) + 4.0 * self.a() * x).sqrt() }
|
|
||||||
fn d(&self, u: f32) -> f32 { 2.0 * self.a() * u + self.b() }
|
|
||||||
pub fn x(&self, u: f32) -> f32 { (self.a() * u.abs() + self.b()) * u }
|
pub fn x(&self, u: f32) -> f32 { (self.a() * u.abs() + self.b()) * u }
|
||||||
pub fn u(&self, x: f32) -> f32 { 0.5 * x.signum() * (-self.b() + self.root(x.abs())) / self.a() }
|
pub fn u(&self, x: f32) -> f32 { 0.5 * x.signum() * (-self.b() + self.root(x)) / self.a() }
|
||||||
pub fn dx(&self, u: f32, du: f32) -> f32 { du * self.d(u.abs()) }
|
pub fn dx(&self, u: f32) -> f32 { 2.0 * self.a() * u.abs() + self.b() }
|
||||||
pub fn du(&self, x: f32, dx: f32) -> f32 { dx / self.root(x.abs()) }
|
pub fn du(&self, x: f32) -> f32 { 1.0 / self.root(x) }
|
||||||
|
|
||||||
pub fn value(&self, x: f32) -> f32 { if x.abs() <= self.external { 1.0 / self.root(x.abs()) } else { 1.0 } }
|
pub fn value(&self, x: f32) -> f32 { if x.abs() <= self.external { 1.0 / self.root(x) } else { 1.0 } }
|
||||||
pub fn derivative(&self, x: f32) -> f32 { if x.abs() <= self.external { -2.0 * x.signum() * self.a() * self.root(x.abs()).powi(-3) } else { 0.0 } }
|
pub fn derivative(&self, x: f32) -> f32 { if x.abs() <= self.external { -2.0 * x.signum() * self.a() * self.root(x).powi(-3) } else { 0.0 } }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -611,9 +611,6 @@ fn test_rect() {
|
||||||
assert_abs_diff_eq!(r.x(r.u(50.0)), 50.0, epsilon = 1.0e-5);
|
assert_abs_diff_eq!(r.x(r.u(50.0)), 50.0, epsilon = 1.0e-5);
|
||||||
assert_abs_diff_eq!(r.x(r.u(-50.0)), -50.0, epsilon = 1.0e-5);
|
assert_abs_diff_eq!(r.x(r.u(-50.0)), -50.0, epsilon = 1.0e-5);
|
||||||
assert_abs_diff_eq!(r.x(r.u(100.0)), 100.0, epsilon = 1.0e-5);
|
assert_abs_diff_eq!(r.x(r.u(100.0)), 100.0, epsilon = 1.0e-5);
|
||||||
assert_abs_diff_eq!(r.d(r.u(10.0)), r.root(10.0), epsilon = 1.0e-5);
|
|
||||||
assert_abs_diff_eq!(r.d(r.u(50.0)), r.root(50.0), epsilon = 1.0e-5);
|
|
||||||
assert_abs_diff_eq!(r.d(r.u(100.0)), r.root(100.0), epsilon = 1.0e-5);
|
|
||||||
assert_abs_diff_eq!(r.du(10.0, r.dx(r.u(10.0), 3.0)), 3.0, epsilon = 1.0e-5);
|
assert_abs_diff_eq!(r.du(10.0, r.dx(r.u(10.0), 3.0)), 3.0, epsilon = 1.0e-5);
|
||||||
assert_abs_diff_eq!(r.du(50.0, r.dx(r.u(50.0), 3.0)), 3.0, epsilon = 1.0e-5);
|
assert_abs_diff_eq!(r.du(50.0, r.dx(r.u(50.0), 3.0)), 3.0, epsilon = 1.0e-5);
|
||||||
assert_abs_diff_eq!(r.du(-50.0, r.dx(r.u(-50.0), 3.0)), 3.0, epsilon = 1.0e-5);
|
assert_abs_diff_eq!(r.du(-50.0, r.dx(r.u(-50.0), 3.0)), 3.0, epsilon = 1.0e-5);
|
||||||
|
|
@ -626,10 +623,12 @@ fn test_rect() {
|
||||||
|
|
||||||
trait FloatExt2 {
|
trait FloatExt2 {
|
||||||
fn lerp(&self, t: f32) -> f32;
|
fn lerp(&self, t: f32) -> f32;
|
||||||
|
fn inverse_lerp(&self, y: f32) -> f32;
|
||||||
}
|
}
|
||||||
|
|
||||||
impl FloatExt2 for (f32, f32) {
|
impl FloatExt2 for (f32, f32) {
|
||||||
fn lerp(&self, t: f32) -> f32 { f32::lerp(self.0, self.1, t) }
|
fn lerp(&self, t: f32) -> f32 { f32::lerp(self.0, self.1, t) }
|
||||||
|
fn inverse_lerp(&self, y: f32) -> f32 { f32::inverse_lerp(self.0, self.1, y) }
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Metric for Rect {
|
impl Metric for Rect {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user