sierpinski_arrowhead/
sierpinski_arrowhead.rs

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