use std::f64::consts::PI; use tui::style::Color; use tui::widgets::canvas::{Painter, Shape}; pub struct Circle { pub x: f64, pub y: f64, pub r: f64, pub start: u16, pub stop: u16, pub color: Color, } impl Default for Circle { fn default() -> Self { Self { x: 0.0, y: 0.0, r: 1.0, start: 0, stop: 360, color: Color::White, } } } impl Shape for Circle { fn draw(&self, painter: &mut Painter) { let (x, y) = (self.x, self.y - self.r); for angle in (self.start..self.stop).map(|n| n as f64 / 180.0 * PI) { let (x, y) = rotate(x, y, angle); if let Some((x, y)) = painter.get_point(x, y) { painter.paint(x, y, self.color); } } } } fn rotate(x: f64, y: f64, a: f64) -> (f64, f64) { ((x * a.cos() - y * a.sin()), (x * a.sin() + y * a.cos())) }