dragon_curve/
dragon_curve.rs1use 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}