Use put_object!

This commit is contained in:
numzero 2024-09-14 19:24:13 +03:00
parent 2a08b6c379
commit 0efa513130

View File

@ -5,6 +5,7 @@ use flo_draw::*;
use glam::*; use glam::*;
use crate::types::FlatTraceResult; use crate::types::FlatTraceResult;
use refraction::mathx::MatExt;
use riemann::{trace_iter, Metric}; use riemann::{trace_iter, Metric};
use tube::metric::Tube; use tube::metric::Tube;
use tube::Space; use tube::Space;
@ -61,6 +62,12 @@ pub fn main() {
}) })
.collect(); .collect();
let space = Space { tube, objs }; 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.canvas_height(500.0);
gc.transform(Transform2D::rotate(FRAC_PI_2)); 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)); // 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); // 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)); 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)); gc.stroke_color(Color::Rgba(0.5, 1.0, 0.0, 1.0));
draw_fan_2( draw_fan_2(gc, &space, cam2, 1.0);
gc,
&space,
vec2(-2.5 * tube.outer_radius, 1.25 * tube.external_halflength),
vec2(1.0, -1.0),
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.2));
draw_track(gc, &space, vec2(-500.0, 0.0), vec2(1.0, 0.5)); draw_track(gc, &space, vec2(-500.0, 0.0), vec2(1.0, 0.5));
draw_track( draw_track(
@ -210,7 +211,6 @@ fn draw_ray_2(gc: &mut Vec<Draw>, space: &Space, base: Vec2, dir: Vec2) {
} }
let mut hits = Vec::<Draw>::new(); let mut hits = Vec::<Draw>::new();
let dir = space.tube.globalize(base, dir);
gc.new_path(); gc.new_path();
gc.move_to(base.x, base.y); gc.move_to(base.x, base.y);
let mut ray = Ray { let mut ray = Ray {
@ -261,11 +261,10 @@ fn draw_ray_2(gc: &mut Vec<Draw>, space: &Space, base: Vec2, dir: Vec2) {
gc.stroke(); gc.stroke();
} }
fn draw_fan_2(gc: &mut Vec<Draw>, space: &Space, base: Vec2, dir: Vec2, spread: f32) { fn draw_fan_2(gc: &mut Vec<Draw>, space: &Space, camera: Location, spread: f32) {
let dir = dir.normalize();
let v = vec2(-dir.y, dir.x);
for y in itertools_num::linspace(-spread, spread, 101) { 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);
} }
} }