summaryrefslogtreecommitdiffstats
path: root/vendor/plotters/examples/sierpinski.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/plotters/examples/sierpinski.rs')
-rw-r--r--vendor/plotters/examples/sierpinski.rs43
1 files changed, 43 insertions, 0 deletions
diff --git a/vendor/plotters/examples/sierpinski.rs b/vendor/plotters/examples/sierpinski.rs
new file mode 100644
index 000000000..b9655bf94
--- /dev/null
+++ b/vendor/plotters/examples/sierpinski.rs
@@ -0,0 +1,43 @@
+use plotters::coord::Shift;
+use plotters::prelude::*;
+
+pub fn sierpinski_carpet(
+ depth: u32,
+ drawing_area: &DrawingArea<BitMapBackend, Shift>,
+) -> Result<(), Box<dyn std::error::Error>> {
+ 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(())
+}
+
+const OUT_FILE_NAME: &'static str = "plotters-doc-data/sierpinski.png";
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let root = BitMapBackend::new(OUT_FILE_NAME, (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)?;
+
+ // To avoid the IO failure being ignored silently, we manually call the present function
+ root.present().expect("Unable to write result to file, please make sure 'plotters-doc-data' dir exists under current dir");
+ println!("Result has been saved to {}", OUT_FILE_NAME);
+
+ Ok(())
+}
+#[test]
+fn entry_point() {
+ main().unwrap()
+}