From 0efa513130134fb3b63803c92f1dfd5a728a26e5 Mon Sep 17 00:00:00 2001 From: numzero Date: Sat, 14 Sep 2024 19:24:13 +0300 Subject: [PATCH] Use put_object! --- src/bin/flat/main.rs | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/src/bin/flat/main.rs b/src/bin/flat/main.rs index 966344c..e887958 100644 --- a/src/bin/flat/main.rs +++ b/src/bin/flat/main.rs @@ -5,6 +5,7 @@ use flo_draw::*; use glam::*; use crate::types::FlatTraceResult; +use refraction::mathx::MatExt; use riemann::{trace_iter, Metric}; use tube::metric::Tube; use tube::Space; @@ -61,6 +62,12 @@ pub fn main() { }) .collect(); let space = Space { tube, objs }; + let cam1 = put_object(&space.tube, vec2(-500., 0.), Mat2::IDENTITY); + let cam2 = put_object( + &space.tube, + vec2(-2.5 * tube.outer_radius, 1.25 * tube.external_halflength), + mat2(vec2(1., -1.), vec2(1., 1.)), + ); gc.canvas_height(500.0); gc.transform(Transform2D::rotate(FRAC_PI_2)); @@ -69,15 +76,9 @@ pub fn main() { // gc.stroke_color(Color::Rgba(1.0, 0.5, 0.0, 0.5)); // draw_fan(gc, &tube, vec2(-500.0, 0.0), vec2(1.0, 0.0), 1.0); gc.stroke_color(Color::Rgba(1.0, 0.5, 0.0, 1.0)); - draw_fan_2(gc, &space, vec2(-500.0, 0.0), vec2(1.0, 0.0), 1.0); + draw_fan_2(gc, &space, cam1, 1.0); gc.stroke_color(Color::Rgba(0.5, 1.0, 0.0, 1.0)); - draw_fan_2( - gc, - &space, - vec2(-2.5 * tube.outer_radius, 1.25 * tube.external_halflength), - vec2(1.0, -1.0), - 1.0, - ); + draw_fan_2(gc, &space, cam2, 1.0); draw_track(gc, &space, vec2(-500.0, 0.0), vec2(1.0, 0.2)); draw_track(gc, &space, vec2(-500.0, 0.0), vec2(1.0, 0.5)); draw_track( @@ -210,7 +211,6 @@ fn draw_ray_2(gc: &mut Vec, space: &Space, base: Vec2, dir: Vec2) { } let mut hits = Vec::::new(); - let dir = space.tube.globalize(base, dir); gc.new_path(); gc.move_to(base.x, base.y); let mut ray = Ray { @@ -261,11 +261,10 @@ fn draw_ray_2(gc: &mut Vec, space: &Space, base: Vec2, dir: Vec2) { gc.stroke(); } -fn draw_fan_2(gc: &mut Vec, space: &Space, base: Vec2, dir: Vec2, spread: f32) { - let dir = dir.normalize(); - let v = vec2(-dir.y, dir.x); +fn draw_fan_2(gc: &mut Vec, space: &Space, camera: Location, spread: f32) { for y in itertools_num::linspace(-spread, spread, 101) { - draw_ray_2(gc, space, base, dir + y * v); + let ray_dir = vec2(1., y); + draw_ray_2(gc, space, camera.pos, camera.rot * ray_dir); } }