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