diff --git a/src/bin/flat/main.rs b/src/bin/flat/main.rs index 17ff4f2..2ec8e8f 100644 --- a/src/bin/flat/main.rs +++ b/src/bin/flat/main.rs @@ -224,7 +224,7 @@ impl Space { Outer => loc, Inner => { let Vec2 { x: u, y } = loc.pos; // в основной СК - let v = self.tube.u(y) + y.signum() * (self.tube.external_halflength - self.tube.internal_halflength); + let v = self.tube.v(y) + y.signum() * (self.tube.external_halflength - self.tube.internal_halflength); Location { pos: vec2(u, v), // в плоском продолжении СК Outer на область Inner rot: self.global_to_flat(loc.pos) * loc.rot, @@ -240,7 +240,7 @@ impl Space { Inner | Outer => { // NB: не работает для частей Outer с |y| < external_halflength. Но они и не нужны. Location { - pos: vec2(pos.x, self.tube.u(pos.y)), // в плоской СК для Inner или её продолжении на Outer + pos: vec2(pos.x, self.tube.v(pos.y)), // в плоской СК для Inner или её продолжении на Outer rot: self.global_to_flat(pos) * rot, } } @@ -583,24 +583,24 @@ struct TubeInside { impl FlatCell for TubeInside { fn pos_to_global(&self, pos: Vec2) -> Vec2 { - vec2(pos.x, self.tube.x(pos.y)) + vec2(pos.x, self.tube.y(pos.y)) } fn pos_to_local(&self, pos: Vec2) -> Vec2 { - vec2(pos.x, self.tube.u(pos.y)) + vec2(pos.x, self.tube.v(pos.y)) } fn ray_to_global(&self, ray: Ray) -> Ray { Ray { pos: self.pos_to_global(ray.pos), - dir: vec2(ray.dir.x, self.tube.dx(ray.pos.y) * ray.dir.y), + dir: vec2(ray.dir.x, self.tube.dy(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.tube.du(ray.pos.y) * ray.dir.y), + dir: vec2(ray.dir.x, self.tube.dv(ray.pos.y) * ray.dir.y), } } @@ -621,10 +621,10 @@ impl Tube { fn fx(&self) -> fns::TubeX { fns::TubeX { min: self.inner_radius, max: self.outer_radius } } fn fy(&self) -> fns::TubeY { fns::TubeY { internal: self.internal_halflength, external: self.external_halflength } } - 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) -> f32 { self.fy().dx(u) } - pub fn du(&self, x: f32) -> f32 { self.fy().du(x) } + pub fn y(&self, v: f32) -> f32 { self.fy().x(v) } + pub fn v(&self, y: f32) -> f32 { self.fy().u(y) } + pub fn dy(&self, v: f32) -> f32 { self.fy().dx(v) } + pub fn dv(&self, y: f32) -> f32 { self.fy().du(y) } } mod fns { @@ -705,32 +705,32 @@ fn test_tube() { external_halflength: 100.0, internal_halflength: 10.0, }; - assert_abs_diff_eq!(t.x(t.internal_halflength), t.external_halflength, epsilon = 1.0e-5); - assert_abs_diff_eq!(t.x(-t.internal_halflength), -t.external_halflength, epsilon = 1.0e-5); - assert_abs_diff_eq!(t.u(t.external_halflength), t.internal_halflength, epsilon = 1.0e-5); - assert_abs_diff_eq!(t.u(-t.external_halflength), -t.internal_halflength, epsilon = 1.0e-5); + assert_abs_diff_eq!(t.y(t.internal_halflength), t.external_halflength, epsilon = 1.0e-5); + assert_abs_diff_eq!(t.y(-t.internal_halflength), -t.external_halflength, epsilon = 1.0e-5); + assert_abs_diff_eq!(t.v(t.external_halflength), t.internal_halflength, epsilon = 1.0e-5); + assert_abs_diff_eq!(t.v(-t.external_halflength), -t.internal_halflength, epsilon = 1.0e-5); - assert_abs_diff_eq!(t.dx(t.internal_halflength), 1.0, epsilon = 1.0e-5); - assert_abs_diff_eq!(t.dx(-t.internal_halflength), 1.0, epsilon = 1.0e-5); - assert_abs_diff_eq!(t.du(t.external_halflength), 1.0, epsilon = 1.0e-5); - assert_abs_diff_eq!(t.du(-t.external_halflength), 1.0, epsilon = 1.0e-5); + assert_abs_diff_eq!(t.dy(t.internal_halflength), 1.0, epsilon = 1.0e-5); + assert_abs_diff_eq!(t.dy(-t.internal_halflength), 1.0, epsilon = 1.0e-5); + assert_abs_diff_eq!(t.dv(t.external_halflength), 1.0, epsilon = 1.0e-5); + assert_abs_diff_eq!(t.dv(-t.external_halflength), 1.0, epsilon = 1.0e-5); - assert_abs_diff_eq!(t.u(t.x(1.0)), 1.0, epsilon = 1.0e-5); - assert_abs_diff_eq!(t.u(t.x(5.0)), 5.0, epsilon = 1.0e-5); - assert_abs_diff_eq!(t.u(t.x(-5.0)), -5.0, epsilon = 1.0e-5); - assert_abs_diff_eq!(t.u(t.x(10.0)), 10.0, epsilon = 1.0e-5); - assert_abs_diff_eq!(t.x(t.u(10.0)), 10.0, epsilon = 1.0e-5); - assert_abs_diff_eq!(t.x(t.u(50.0)), 50.0, epsilon = 1.0e-5); - assert_abs_diff_eq!(t.x(t.u(-50.0)), -50.0, epsilon = 1.0e-5); - assert_abs_diff_eq!(t.x(t.u(100.0)), 100.0, epsilon = 1.0e-5); - assert_abs_diff_eq!(t.du(10.0) * t.dx(t.u(10.0)), 1.0, epsilon = 1.0e-5); - assert_abs_diff_eq!(t.du(50.0) * t.dx(t.u(50.0)), 1.0, epsilon = 1.0e-5); - assert_abs_diff_eq!(t.du(-50.0) * t.dx(t.u(-50.0)), 1.0, epsilon = 1.0e-5); - assert_abs_diff_eq!(t.du(100.0) * t.dx(t.u(100.0)), 1.0, epsilon = 1.0e-5); - assert_abs_diff_eq!(t.dx(1.0) * t.du(t.x(1.0)), 1.0, epsilon = 1.0e-5); - assert_abs_diff_eq!(t.dx(5.0) * t.du(t.x(5.0)), 1.0, epsilon = 1.0e-5); - assert_abs_diff_eq!(t.dx(-5.0) * t.du(t.x(-5.0)), 1.0, epsilon = 1.0e-5); - assert_abs_diff_eq!(t.dx(10.0) * t.du(t.x(10.0)), 1.0, epsilon = 1.0e-5); + assert_abs_diff_eq!(t.v(t.y(1.0)), 1.0, epsilon = 1.0e-5); + assert_abs_diff_eq!(t.v(t.y(5.0)), 5.0, epsilon = 1.0e-5); + assert_abs_diff_eq!(t.v(t.y(-5.0)), -5.0, epsilon = 1.0e-5); + assert_abs_diff_eq!(t.v(t.y(10.0)), 10.0, epsilon = 1.0e-5); + assert_abs_diff_eq!(t.y(t.v(10.0)), 10.0, epsilon = 1.0e-5); + assert_abs_diff_eq!(t.y(t.v(50.0)), 50.0, epsilon = 1.0e-5); + assert_abs_diff_eq!(t.y(t.v(-50.0)), -50.0, epsilon = 1.0e-5); + assert_abs_diff_eq!(t.y(t.v(100.0)), 100.0, epsilon = 1.0e-5); + assert_abs_diff_eq!(t.dv(10.0) * t.dy(t.v(10.0)), 1.0, epsilon = 1.0e-5); + assert_abs_diff_eq!(t.dv(50.0) * t.dy(t.v(50.0)), 1.0, epsilon = 1.0e-5); + assert_abs_diff_eq!(t.dv(-50.0) * t.dy(t.v(-50.0)), 1.0, epsilon = 1.0e-5); + assert_abs_diff_eq!(t.dv(100.0) * t.dy(t.v(100.0)), 1.0, epsilon = 1.0e-5); + assert_abs_diff_eq!(t.dy(1.0) * t.dv(t.y(1.0)), 1.0, epsilon = 1.0e-5); + assert_abs_diff_eq!(t.dy(5.0) * t.dv(t.y(5.0)), 1.0, epsilon = 1.0e-5); + assert_abs_diff_eq!(t.dy(-5.0) * t.dv(t.y(-5.0)), 1.0, epsilon = 1.0e-5); + assert_abs_diff_eq!(t.dy(10.0) * t.dv(t.y(10.0)), 1.0, epsilon = 1.0e-5); } trait FloatExt2 {