Add second sample

This commit is contained in:
numzero 2024-04-29 00:55:29 +03:00
parent a805c5e06e
commit 43eb0a2ea8

View File

@ -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::*;