36 lines
1.1 KiB
Rust
36 lines
1.1 KiB
Rust
//! 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);
|
|
}
|
|
}
|