From 1d93c22a73510f933ace9d11eda0886b70ff3e77 Mon Sep 17 00:00:00 2001 From: Franz Dietrich Date: Sun, 19 Oct 2025 09:24:31 +0200 Subject: [PATCH] dashed_circle example --- turtle-lib/examples/dashed_circle.rs | 35 ++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 turtle-lib/examples/dashed_circle.rs diff --git a/turtle-lib/examples/dashed_circle.rs b/turtle-lib/examples/dashed_circle.rs new file mode 100644 index 0000000..a29c776 --- /dev/null +++ b/turtle-lib/examples/dashed_circle.rs @@ -0,0 +1,35 @@ +//! Dashed circle example ported from sunjay/turtle +//! This draws a dashed circle but uses `circle_left` arcs for each segment instead of individual short lines. + +use turtle_lib::{turtle_main, vec2, CurvedMovement, Turnable}; + +#[turtle_main("Dashed Circle")] +fn draw(turtle: &mut TurtlePlan) { + // Circle parameters + let radius = 120.0_f32; + let number_of_dashes = 24; + let segments_angle = 360 / number_of_dashes; + let steps_per_arc = 6; // number of steps to tessellate each small arc + + // Position turtle at circle start + turtle + .reset() + .pen_up() + .go_to(vec2(radius, 0.0)) + .pen_down() + .left(90.0); + + for i in 0..number_of_dashes { + // Determine whether current group is drawing or skipping + let draw_segment = usize::is_multiple_of(i, 2); + + if draw_segment { + turtle.pen_down(); + } else { + turtle.pen_up(); + } + + // Draw a small arc using circle_left. Each call advances the heading by segment_angle. + turtle.circle_left(radius, segments_angle as f32, steps_per_arc); + } +}