Add objects

This commit is contained in:
numzero 2024-06-09 20:24:19 +03:00
parent c510a3fc70
commit 2c47c66b60

View File

@ -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<Object>,
}
#[derive(PartialEq, Eq, Debug)]