use plotters::coord::Shift; use plotters::prelude::*; pub fn sierpinski_carpet( depth: u32, drawing_area: &DrawingArea, ) -> Result<(), Box> { if depth > 0 { let sub_areas = drawing_area.split_evenly((3, 3)); for (idx, sub_area) in (0..).zip(sub_areas.iter()) { if idx != 4 { sub_area.fill(&BLUE)?; sierpinski_carpet(depth - 1, sub_area)?; } else { sub_area.fill(&WHITE)?; } } } Ok(()) } fn main() -> Result<(), Box> { let root = BitMapBackend::new("plotters-doc-data/sierpinski.png", (1024, 768)).into_drawing_area(); root.fill(&WHITE)?; let root = root .titled("Sierpinski Carpet Demo", ("sans-serif", 60))? .shrink(((1024 - 700) / 2, 0), (700, 700)); sierpinski_carpet(5, &root) } #[test] fn entry_point() { main().unwrap() }