Extract DT a level up

This commit is contained in:
numzero 2024-05-27 19:34:14 +03:00
parent 23cddeb940
commit 355416764f

View File

@ -83,8 +83,8 @@ impl Space {
/// ray задаётся в основной СК. /// ray задаётся в основной СК.
fn trace_step(&self, ray: Ray) -> Ray { fn trace_step(&self, ray: Ray) -> Ray {
let a: Vec2 = -riemann::contract2(riemann::krist(&self.rect, ray.pos), ray.dir); let a: Vec2 = -riemann::contract2(riemann::krist(&self.rect, ray.pos), ray.dir);
let v = ray.dir + a * DT; let v = ray.dir + a;
let p = ray.pos + v * DT; let p = ray.pos + v;
Ray { pos: p, dir: v } Ray { pos: p, dir: v }
} }
@ -131,7 +131,7 @@ fn draw_ray_2(gc: &mut Vec<Draw>, space: &Space, base: Vec2, dir: Vec2) {
gc.new_path(); gc.new_path();
gc.move_to(base.x, base.y); gc.move_to(base.x, base.y);
let mut p = base; let mut p = base;
let mut v = space.rect.normalize_vec_at(base, dir); let mut v = space.rect.normalize_vec_at(base, dir) * DT;
for _ in 0..10000 { for _ in 0..10000 {
Ray { pos: p, dir: v } = space.trace_step(Ray { pos: p, dir: v }); Ray { pos: p, dir: v } = space.trace_step(Ray { pos: p, dir: v });
gc.line_to(p.x, p.y); gc.line_to(p.x, p.y);
@ -157,7 +157,7 @@ fn draw_ray_2(gc: &mut Vec<Draw>, space: &Space, base: Vec2, dir: Vec2) {
Outer => { Outer => {
let cell = basic_shapes::Rect { size: vec2(space.rect.outer_radius, space.rect.external_halflength) }; let cell = basic_shapes::Rect { size: vec2(space.rect.outer_radius, space.rect.external_halflength) };
let Some(dist) = cell.trace_into(Ray { pos: p, dir: v }) else { let Some(dist) = cell.trace_into(Ray { pos: p, dir: v }) else {
p += v * 1000.0; p += v * (1000.0 / DT);
gc.line_to(p.x, p.y); gc.line_to(p.x, p.y);
gc.stroke(); gc.stroke();
break; break;
@ -378,7 +378,7 @@ trait FlatCell: std::fmt::Debug {
} else { } else {
(bnd.1.y - p.y) / v.y (bnd.1.y - p.y) / v.y
}; };
if t <= 1000.0 { if t <= 100000.0 {
Some(Ray { pos: sgn * (p + v * t), dir: sgn * v }) Some(Ray { pos: sgn * (p + v * t), dir: sgn * v })
} else { } else {
None None