• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 use plotters::coord::Shift;
2 use plotters::prelude::*;
3 
sierpinski_carpet( depth: u32, drawing_area: &DrawingArea<BitMapBackend, Shift>, ) -> Result<(), Box<dyn std::error::Error>>4 pub fn sierpinski_carpet(
5     depth: u32,
6     drawing_area: &DrawingArea<BitMapBackend, Shift>,
7 ) -> Result<(), Box<dyn std::error::Error>> {
8     if depth > 0 {
9         let sub_areas = drawing_area.split_evenly((3, 3));
10         for (idx, sub_area) in (0..).zip(sub_areas.iter()) {
11             if idx != 4 {
12                 sub_area.fill(&BLUE)?;
13                 sierpinski_carpet(depth - 1, sub_area)?;
14             } else {
15                 sub_area.fill(&WHITE)?;
16             }
17         }
18     }
19     Ok(())
20 }
21 
main() -> Result<(), Box<dyn std::error::Error>>22 fn main() -> Result<(), Box<dyn std::error::Error>> {
23     let root =
24         BitMapBackend::new("plotters-doc-data/sierpinski.png", (1024, 768)).into_drawing_area();
25 
26     root.fill(&WHITE)?;
27 
28     let root = root
29         .titled("Sierpinski Carpet Demo", ("sans-serif", 60))?
30         .shrink(((1024 - 700) / 2, 0), (700, 700));
31 
32     sierpinski_carpet(5, &root)
33 }
34 #[test]
entry_point()35 fn entry_point() {
36     main().unwrap()
37 }
38