sierpinski_arrowhead/
sierpinski_arrowhead.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("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}