use crate::{color::Color, Sample}; pub struct Matrix { pub inner: Box, pub matrix: ((f64, f64), (f64, f64)), } impl Sample for Matrix { fn sample(&mut self, x: f64, y: f64) -> Color { let (x, y) = ( x * self.matrix.0 .0 + y * self.matrix.0 .1, x * self.matrix.1 .0 + y * self.matrix.1 .1, ); self.inner.sample(x, y) } } pub struct Polar(pub Box); impl Sample for Polar { fn sample(&mut self, x: f64, y: f64) -> Color { let ang = x.atan2(y); let dist = (x * x + y * y).sqrt(); self.0.sample(ang, dist) } } pub struct Translate { pub inner: Box, pub offset: (f64, f64), } impl Sample for Translate { fn sample(&mut self, x: f64, y: f64) -> Color { self.inner.sample(x + self.offset.0, y + self.offset.1) } }