Use proper coordinate adjustments in the objects
This commit is contained in:
parent
f3288c7331
commit
c6591e7455
|
|
@ -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
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user