Add objects
This commit is contained in:
parent
c510a3fc70
commit
2c47c66b60
|
|
@ -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)]
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user