Use proper coordinate adjustments in the objects

This commit is contained in:
numzero 2024-06-09 23:29:18 +03:00
parent f3288c7331
commit c6591e7455

View File

@ -39,7 +39,14 @@ pub fn main() {
.enumerate() .enumerate()
.map(|(k, y)| Object { .map(|(k, y)| Object {
id: k as i32, id: k as i32,
loc: Location { pos: vec2(0.0, y * tube.external_halflength), rot: Mat2::IDENTITY }, loc: {
let pos = vec2(0.0, y * tube.external_halflength);
let adj = tube.sqrt_at(pos).inverse().into();
Location {
pos,
rot: adj,
}
},
r: 20.0, r: 20.0,
}) })
.collect(); .collect();
@ -68,13 +75,13 @@ pub fn main() {
gc.stroke_color(Color::Rgba(0.0, 0.0, 0.0, 0.5)); gc.stroke_color(Color::Rgba(0.0, 0.0, 0.0, 0.5));
draw_loop(gc, itertools_num::linspace(0.0, 2.0 * PI, 32).skip(1).map(|φ| { draw_loop(gc, itertools_num::linspace(0.0, 2.0 * PI, 32).skip(1).map(|φ| {
let dir = Vec2::from_angle(φ) * obj.r; let dir = Vec2::from_angle(φ) * obj.r;
let dir = space.flat_to_global(pos) * dir; let dir = obj.loc.rot * dir;
pos + dir pos + dir
})); }));
gc.stroke_color(Color::Rgba(0.0, 0.5, 1.0, 0.5)); gc.stroke_color(Color::Rgba(0.0, 0.5, 1.0, 0.5));
draw_loop(gc, itertools_num::linspace(0.0, 2.0 * PI, 32).skip(1).map(|φ| { draw_loop(gc, itertools_num::linspace(0.0, 2.0 * PI, 32).skip(1).map(|φ| {
let dir = Vec2::from_angle(φ) * obj.r; let dir = Vec2::from_angle(φ) * obj.r;
let dir = space.flat_to_global(pos) * dir; let dir = obj.loc.rot * dir;
space.trace_step(Ray { pos, dir }).pos space.trace_step(Ray { pos, dir }).pos
})); }));
gc.stroke_color(Color::Rgba(0.5, 0.0, 1.0, 1.0)); gc.stroke_color(Color::Rgba(0.5, 0.0, 1.0, 1.0));
@ -82,7 +89,7 @@ pub fn main() {
let n = obj.r.floor(); let n = obj.r.floor();
let d = obj.r / n; let d = obj.r / n;
let dir = Vec2::from_angle(φ); let dir = Vec2::from_angle(φ);
let dir = space.flat_to_global(pos) * dir * d; let dir = obj.loc.rot * dir * d;
space.trace_iter(Ray { pos, dir }).nth(n as usize).unwrap().pos space.trace_iter(Ray { pos, dir }).nth(n as usize).unwrap().pos
})); }));
} }