Expose the fact dx and du are linear
This commit is contained in:
parent
fdc4e22da0
commit
17ed87035a
|
|
@ -243,7 +243,7 @@ impl Space {
|
|||
Inner => {
|
||||
let Vec2 { x, y } = obj.loc.pos; // в основной СК
|
||||
let y = self.rect.u(y) + y.signum() * (self.rect.external_halflength - self.rect.internal_halflength);
|
||||
let dy = self.rect.du(y, 1.0);
|
||||
let dy = self.rect.du(y);
|
||||
let m = Mat2::from_cols_array(&[1.0, 0.0, 0.0, dy]);
|
||||
Object {
|
||||
id: obj.id,
|
||||
|
|
@ -611,14 +611,14 @@ impl FlatCell for RectInside {
|
|||
fn ray_to_global(&self, ray: Ray) -> Ray {
|
||||
Ray {
|
||||
pos: self.pos_to_global(ray.pos),
|
||||
dir: vec2(ray.dir.x, self.rect.dx(ray.pos.y, ray.dir.y)),
|
||||
dir: vec2(ray.dir.x, self.rect.dx(ray.pos.y) * ray.dir.y),
|
||||
}
|
||||
}
|
||||
|
||||
fn ray_to_local(&self, ray: Ray) -> Ray {
|
||||
Ray {
|
||||
pos: self.pos_to_local(ray.pos),
|
||||
dir: vec2(ray.dir.x, self.rect.du(ray.pos.y, ray.dir.y)),
|
||||
dir: vec2(ray.dir.x, self.rect.du(ray.pos.y) * ray.dir.y),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -641,8 +641,8 @@ impl Rect {
|
|||
|
||||
pub fn x(&self, u: f32) -> f32 { self.fy().x(u) }
|
||||
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 du(&self, x: f32, dx: f32) -> f32 { self.fy().du(x) * dx }
|
||||
pub fn dx(&self, u: f32) -> f32 { self.fy().dx(u) }
|
||||
pub fn du(&self, x: f32) -> f32 { self.fy().du(x) }
|
||||
}
|
||||
|
||||
mod fns {
|
||||
|
|
@ -728,10 +728,10 @@ fn test_rect() {
|
|||
assert_abs_diff_eq!(r.u(r.external_halflength), r.internal_halflength, epsilon = 1.0e-5);
|
||||
assert_abs_diff_eq!(r.u(-r.external_halflength), -r.internal_halflength, epsilon = 1.0e-5);
|
||||
|
||||
assert_abs_diff_eq!(r.dx(r.internal_halflength, 3.0), 3.0, epsilon = 1.0e-5);
|
||||
assert_abs_diff_eq!(r.dx(-r.internal_halflength, 3.0), 3.0, epsilon = 1.0e-5);
|
||||
assert_abs_diff_eq!(r.du(r.external_halflength, 3.0), 3.0, epsilon = 1.0e-5);
|
||||
assert_abs_diff_eq!(r.du(-r.external_halflength, 3.0), 3.0, epsilon = 1.0e-5);
|
||||
assert_abs_diff_eq!(r.dx(r.internal_halflength), 1.0, epsilon = 1.0e-5);
|
||||
assert_abs_diff_eq!(r.dx(-r.internal_halflength), 1.0, epsilon = 1.0e-5);
|
||||
assert_abs_diff_eq!(r.du(r.external_halflength), 1.0, epsilon = 1.0e-5);
|
||||
assert_abs_diff_eq!(r.du(-r.external_halflength), 1.0, epsilon = 1.0e-5);
|
||||
|
||||
assert_abs_diff_eq!(r.u(r.x(1.0)), 1.0, epsilon = 1.0e-5);
|
||||
assert_abs_diff_eq!(r.u(r.x(5.0)), 5.0, epsilon = 1.0e-5);
|
||||
|
|
@ -741,14 +741,14 @@ 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(100.0)), 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(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(100.0, r.dx(r.u(100.0), 3.0)), 3.0, epsilon = 1.0e-5);
|
||||
assert_abs_diff_eq!(r.dx(1.0, r.du(r.x(1.0), 3.0)), 3.0, epsilon = 1.0e-5);
|
||||
assert_abs_diff_eq!(r.dx(5.0, r.du(r.x(5.0), 3.0)), 3.0, epsilon = 1.0e-5);
|
||||
assert_abs_diff_eq!(r.dx(-5.0, r.du(r.x(-5.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);
|
||||
assert_abs_diff_eq!(r.du(10.0) * r.dx(r.u(10.0)), 1.0, epsilon = 1.0e-5);
|
||||
assert_abs_diff_eq!(r.du(50.0) * r.dx(r.u(50.0)), 1.0, epsilon = 1.0e-5);
|
||||
assert_abs_diff_eq!(r.du(-50.0) * r.dx(r.u(-50.0)), 1.0, epsilon = 1.0e-5);
|
||||
assert_abs_diff_eq!(r.du(100.0) * r.dx(r.u(100.0)), 1.0, epsilon = 1.0e-5);
|
||||
assert_abs_diff_eq!(r.dx(1.0) * r.du(r.x(1.0)), 1.0, epsilon = 1.0e-5);
|
||||
assert_abs_diff_eq!(r.dx(5.0) * r.du(r.x(5.0)), 1.0, epsilon = 1.0e-5);
|
||||
assert_abs_diff_eq!(r.dx(-5.0) * r.du(r.x(-5.0)), 1.0, epsilon = 1.0e-5);
|
||||
assert_abs_diff_eq!(r.dx(10.0) * r.du(r.x(10.0)), 1.0, epsilon = 1.0e-5);
|
||||
}
|
||||
|
||||
trait FloatExt2 {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user