diff --git a/src/bin/flat.rs b/src/bin/flat.rs index a28b6a2..f397495 100644 --- a/src/bin/flat.rs +++ b/src/bin/flat.rs @@ -33,7 +33,16 @@ pub fn main() { external_halflength: 300.0, }; - let space = Space { rect: tube }; + let objs: Vec<_> = [-1.25, -1.00, -0.85, -0.50, 0.00, 0.40, 0.70, 0.95, 1.05] + .iter() + .enumerate() + .map(|(k, y)| Object { + id: k as i32, + loc: Location { pos: vec2(0.0, y * tube.external_halflength), rot: Mat2::IDENTITY }, + r: 20.0, + }) + .collect(); + let space = Space { rect: tube, objs }; gc.canvas_height(1000.0); tube.render(gc); @@ -46,8 +55,8 @@ pub fn main() { draw_track(gc, &space, vec2(-500.0, 0.0), vec2(1.0, 0.5)); draw_track(gc, &space, vec2(-0.5 * tube.inner_radius, -1.25 * tube.external_halflength), vec2(0.1, 1.0)); - for y in [-1.25, -1.00, -0.85, -0.50, 0.00, 0.40, 0.70, 0.95, 1.05] { - let pos = vec2(0.0, y * tube.external_halflength); + for obj in &space.objs { + let pos = obj.loc.pos; gc.new_path(); gc.circle(pos.x, pos.y, 5.0); gc.fill_color(Color::Rgba(0.0, 0.5, 1.0, 1.0)); @@ -55,21 +64,23 @@ pub fn main() { 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(|φ| { - let dir = Vec2::from_angle(φ) * 20.0; + let dir = Vec2::from_angle(φ) * obj.r; let dir = space.flat_to_global(pos, dir); pos + dir })); 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(|φ| { - let dir = Vec2::from_angle(φ) * 20.0; + let dir = Vec2::from_angle(φ) * obj.r; let dir = space.flat_to_global(pos, dir); space.trace_step(Ray { pos, dir }).pos })); gc.stroke_color(Color::Rgba(0.5, 0.0, 1.0, 1.0)); draw_loop(gc, itertools_num::linspace(0.0, 2.0 * PI, 32).skip(1).map(|φ| { + let n = obj.r.floor(); + let d = obj.r / n; let dir = Vec2::from_angle(φ); - let dir = space.flat_to_global(pos, dir); - space.trace_iter(Ray { pos, dir }).nth(20).unwrap().pos + let dir = space.flat_to_global(pos, dir) * d; + space.trace_iter(Ray { pos, dir }).nth(n as usize).unwrap().pos })); } }); @@ -83,8 +94,15 @@ struct Location { rot: Mat2, } +struct Object { + id: i32, + loc: Location, + r: f32, +} + struct Space { rect: Rect, + objs: Vec, } #[derive(PartialEq, Eq, Debug)]