dragon_curve/
dragon_curve.rs

1use image::Rgb;
2
3use dcc_lsystem::renderer::ImageRendererOptionsBuilder;
4use dcc_lsystem::renderer::Renderer;
5use dcc_lsystem::turtle::{TurtleAction, TurtleLSystemBuilder};
6
7fn main() {
8    let mut builder = TurtleLSystemBuilder::new();
9
10    builder
11        .token("X", TurtleAction::Nothing)
12        .token("Y", TurtleAction::Nothing)
13        .token("F", TurtleAction::Forward(30))
14        .token("+", TurtleAction::Rotate(-90))
15        .token("-", TurtleAction::Rotate(90))
16        .axiom("F X")
17        .rule("X => X + Y F +")
18        .rule("Y => - F X - Y");
19
20    let (mut system, renderer) = builder.finish();
21    system.step_by(15);
22
23    let options = ImageRendererOptionsBuilder::new()
24        .padding(10)
25        .thickness(8.0)
26        .fill_color(Rgb([255u8, 255u8, 255u8]))
27        .line_color(Rgb([100u8, 0u8, 0u8]))
28        .build();
29
30    renderer
31        .render(&system, &options)
32        .save("dragon_curve.png")
33        .expect("Failed to save to dragon_curve.png");
34}