From f6cff545d27d5939a1b651004458e97deaf900de Mon Sep 17 00:00:00 2001 From: Akshay Date: Mon, 15 Mar 2021 10:55:18 +0530 Subject: refactor get_circle to draw filled & outline circles --- src/symmetry.rs | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 src/symmetry.rs (limited to 'src/symmetry.rs') diff --git a/src/symmetry.rs b/src/symmetry.rs new file mode 100644 index 0000000..7517317 --- /dev/null +++ b/src/symmetry.rs @@ -0,0 +1,42 @@ +use std::fmt; + +use crate::bitmap::{mirror_figure, reflect_figure, Axis, MapPoint}; + +#[derive(Debug, Default, Copy, Clone)] +pub struct Symmetry { + pub x: Option, + pub y: Option, +} + +impl Symmetry { + pub fn apply(self, figure: &[MapPoint]) -> Vec { + let Symmetry { x, y } = self; + match (x, y) { + (None, None) => vec![], + (Some(line), None) => mirror_figure(figure, line, Axis::X), + (None, Some(line)) => mirror_figure(figure, line, Axis::Y), + (Some(x), Some(y)) => { + let along_x = mirror_figure(figure, x, Axis::X); + let along_y = mirror_figure(figure, y, Axis::Y); + let reflected = reflect_figure(figure, (x, y).into()); + along_x + .into_iter() + .chain(along_y) + .chain(reflected) + .collect() + } + } + } +} + +impl fmt::Display for Symmetry { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + let Symmetry { x, y } = self; + match (x, y) { + (None, None) => write!(f, " "), + (Some(_), None) => write!(f, "-"), + (None, Some(_)) => write!(f, "|"), + (Some(_), Some(_)) => write!(f, "+"), + } + } +} -- cgit v1.2.3