Smoother circles

This commit is contained in:
numzero 2024-06-10 00:10:31 +03:00
parent b22c36a983
commit ab5446385b

View File

@ -65,6 +65,7 @@ pub fn main() {
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(gc, &space, vec2(-0.5 * tube.inner_radius, -1.25 * tube.external_halflength), vec2(0.1, 1.0)); draw_track(gc, &space, vec2(-0.5 * tube.inner_radius, -1.25 * tube.external_halflength), vec2(0.1, 1.0));
let circle_segments = 47;
for obj in &space.objs { for obj in &space.objs {
let pos = obj.loc.pos; let pos = obj.loc.pos;
gc.new_path(); gc.new_path();
@ -73,19 +74,19 @@ pub fn main() {
gc.fill(); gc.fill();
gc.stroke_color(Color::Rgba(0.0, 0.0, 0.0, 0.5)); gc.stroke_color(Color::Rgba(0.0, 0.0, 0.0, 0.5));
draw_loop(gc, itertools_num::linspace(0.0, 2.0 * PI, 32).skip(1).map(|φ| { draw_loop(gc, itertools_num::linspace(0.0, 2.0 * PI, circle_segments).skip(1).map(|φ| {
let dir = Vec2::from_angle(φ) * obj.r; let dir = Vec2::from_angle(φ) * obj.r;
let dir = obj.loc.rot * dir; let dir = obj.loc.rot * dir;
pos + dir pos + dir
})); }));
gc.stroke_color(Color::Rgba(0.0, 0.5, 1.0, 0.5)); gc.stroke_color(Color::Rgba(0.0, 0.5, 1.0, 0.5));
draw_loop(gc, itertools_num::linspace(0.0, 2.0 * PI, 32).skip(1).map(|φ| { draw_loop(gc, itertools_num::linspace(0.0, 2.0 * PI, circle_segments).skip(1).map(|φ| {
let dir = Vec2::from_angle(φ) * obj.r; let dir = Vec2::from_angle(φ) * obj.r;
let dir = obj.loc.rot * dir; let dir = obj.loc.rot * dir;
space.trace_step(Ray { pos, dir }).pos space.trace_step(Ray { pos, dir }).pos
})); }));
gc.stroke_color(Color::Rgba(0.5, 0.0, 1.0, 1.0)); gc.stroke_color(Color::Rgba(0.5, 0.0, 1.0, 1.0));
draw_loop(gc, itertools_num::linspace(0.0, 2.0 * PI, 32).skip(1).map(|φ| { draw_loop(gc, itertools_num::linspace(0.0, 2.0 * PI, circle_segments).skip(1).map(|φ| {
let n = obj.r.floor(); let n = obj.r.floor();
let d = obj.r / n; let d = obj.r / n;
let dir = Vec2::from_angle(φ); let dir = Vec2::from_angle(φ);