diff --git a/src/bin/flat.rs b/src/bin/flat.rs index 063cb8d..2fc69a9 100644 --- a/src/bin/flat.rs +++ b/src/bin/flat.rs @@ -10,16 +10,22 @@ pub fn main() { coil_w: 50.0, coil_m: 10.0, }; + let space = Rect { + box_scale: 3.0, + box_a: vec2(- 30.0, - 300.0), + box_b: vec2(30.0, 300.0), + box_m: vec2(20.0, 50.0), + }; with_2d_graphics(move || { let canvas = create_drawing_window("Refraction"); canvas.draw(|gc| { gc.canvas_height(1000.0); gc.new_path(); - gc.circle(0.0, 0.0, space.coil_r + space.coil_w + space.coil_m); - gc.circle(0.0, 0.0, space.coil_r + space.coil_w); - gc.circle(0.0, 0.0, space.coil_r - space.coil_w); - gc.circle(0.0, 0.0, space.coil_r - space.coil_w - space.coil_m); + //gc.circle(0.0, 0.0, space.coil_r + space.coil_w + space.coil_m); + //gc.circle(0.0, 0.0, space.coil_r + space.coil_w); + //gc.circle(0.0, 0.0, space.coil_r - space.coil_w); + //gc.circle(0.0, 0.0, space.coil_r - space.coil_w - space.coil_m); gc.winding_rule(WindingRule::EvenOdd); gc.fill_color(Color::Rgba(0.8, 0.8, 0.8, 1.0)); gc.fill(); @@ -29,10 +35,10 @@ pub fn main() { for y in itertools_num::linspace(-1.0, 1.0, 101) { draw_ray(gc, &space, vec2(-500.0, 0.0), vec2(1.0, y)); } - gc.stroke_color(Color::Rgba(0.0, 0.5, 1.0, 1.0)); - for y in itertools_num::linspace(-1.0, 1.0, 101) { - draw_ray(gc, &space, vec2(0.0, space.coil_r), vec2(1.0, y)); - } + // gc.stroke_color(Color::Rgba(0.0, 0.5, 1.0, 1.0)); + // for y in itertools_num::linspace(-1.0, 1.0, 101) { + // draw_ray(gc, &space, vec2(0.0, space.coil_r), vec2(1.0, y)); + // } }); }); } @@ -75,6 +81,23 @@ impl Metric for Coil { } } +struct Rect { + box_scale: f32, + box_a: Vec2, + box_b: Vec2, + box_m: Vec2, +} + +impl Metric for Rect { + fn halfmetric(&self, pos: Vec2) -> Decomp2 { + let s = smoothbox(pos.x, vec2(self.box_a.x, self.box_b.x), self.box_m.x) * smoothbox(pos.y, vec2(self.box_a.y, self.box_b.y), self.box_m.y); + Decomp2{ + ortho: Mat2::IDENTITY, + diag: vec2(1.0, self.box_scale.powf(-s)), + } + } +} + mod riemann { use glam::*;