Nerdy!
This commit is contained in:
parent
69cc1904a8
commit
e8fdd5f338
|
|
@ -593,6 +593,16 @@ fn test_rect() {
|
||||||
assert_abs_diff_eq!(r.dx(10.0, r.du(r.x(10.0), 3.0)), 3.0, epsilon = 1.0e-5);
|
assert_abs_diff_eq!(r.dx(10.0, r.du(r.x(10.0), 3.0)), 3.0, epsilon = 1.0e-5);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
trait FloatExt2 {
|
||||||
|
fn lerp(&self, t: f32) -> f32;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl FloatExt2 for (f32, f32) {
|
||||||
|
fn lerp(&self, t: f32) -> f32 {
|
||||||
|
self.0.lerp(self.1, t)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl Metric for Rect {
|
impl Metric for Rect {
|
||||||
fn sqrt_at(&self, pos: Vec2) -> Decomp2 {
|
fn sqrt_at(&self, pos: Vec2) -> Decomp2 {
|
||||||
let y = pos.y.abs();
|
let y = pos.y.abs();
|
||||||
|
|
@ -603,7 +613,7 @@ impl Metric for Rect {
|
||||||
assert!(sy > 0.0);
|
assert!(sy > 0.0);
|
||||||
Decomp2 {
|
Decomp2 {
|
||||||
ortho: Mat2::IDENTITY,
|
ortho: Mat2::IDENTITY,
|
||||||
diag: vec2(1.0, sy.lerp(1.0, sx)),
|
diag: vec2(1.0, (sy, 1.0).lerp(sx)),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -612,7 +622,7 @@ impl Metric for Rect {
|
||||||
let y = pos.y.abs();
|
let y = pos.y.abs();
|
||||||
let sx = ((x - self.inner_radius) / (self.outer_radius - self.inner_radius)).clamp(0.0, 1.0);
|
let sx = ((x - self.inner_radius) / (self.outer_radius - self.inner_radius)).clamp(0.0, 1.0);
|
||||||
let sy = if y <= self.external_halflength { 1.0 / self.root(y) } else { 1.0 };
|
let sy = if y <= self.external_halflength { 1.0 / self.root(y) } else { 1.0 };
|
||||||
let s = sy.lerp(1.0, sx);
|
let s = (sy, 1.0).lerp(sx);
|
||||||
let dsx_dx = if x > self.inner_radius && x < self.outer_radius { pos.x.signum() / (self.outer_radius - self.inner_radius) } else { 0.0 };
|
let dsx_dx = if x > self.inner_radius && x < self.outer_radius { pos.x.signum() / (self.outer_radius - self.inner_radius) } else { 0.0 };
|
||||||
let dsy_dy = if y <= self.external_halflength { -2.0 * pos.y.signum() * self.a() * sy.powi(3) } else { 0.0 };
|
let dsy_dy = if y <= self.external_halflength { -2.0 * pos.y.signum() * self.a() * sy.powi(3) } else { 0.0 };
|
||||||
let ds2_dx = 2.0 * s * (1.0 - sy) * dsx_dx;
|
let ds2_dx = 2.0 * s * (1.0 - sy) * dsx_dx;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user