sierpinski_triangle/
sierpinski_triangle.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("F", TurtleAction::Forward(200))
11        .token("G", TurtleAction::Forward(200))
12        .token("+", TurtleAction::Rotate(120))
13        .token("-", TurtleAction::Rotate(-120))
14        .axiom("F - G - G")
15        .rule("F => F - G + F + G - F")
16        .rule("G => G G");
17
18    let (mut system, renderer) = builder.finish();
19    system.step_by(7);
20
21    let options = ImageRendererOptionsBuilder::new()
22        .padding(20)
23        .thickness(8.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_triangle.png")
31        .expect("Failed to save to sierpinski_triangle.png");
32}