research-bases.rs
1.2 kB · rust · 38 lines
1use mrlycore::errors::Result;2use mrlyfig::{ink, save, Board};3use mrlynum::factor::gcd;4use mrlynum::gauss::Ring;56const RADIUS: i64 = 30;78fn main() -> Result<()> {9 let mut board = Board::square();10 let frame = board.frame(0.08);11 let ring = Ring::Eisenstein;12 let (cx, cy) = frame.center();13 let unit = frame.w / (2.0 * RADIUS as f64 + 0.8);14 let mut total = 0usize;15 let mut visible = 0usize;16 for a in -RADIUS..=RADIUS {17 for b in -RADIUS..=RADIUS {18 if ring.reach(a, b) > RADIUS as u64 {19 continue;20 }21 total += 1;22 let (u, v) = ring.place(a, b);23 let (x, y) = (cx + u * unit, cy - v * unit);24 if a == 0 && b == 0 {25 board.disc(x, y, unit * 0.20, ink::fade(ink::dim(), 0.9));26 } else if gcd(a.unsigned_abs() as usize, b.unsigned_abs() as usize) == 1 {27 visible += 1;28 board.disc(x, y, unit * 0.30, ink::blue());29 } else {30 board.disc(x, y, unit * 0.13, ink::fade(ink::dim(), 0.8));31 }32 }33 }34 assert_eq!(total, ring.count(RADIUS as u64));35 assert_eq!(visible, 1668);36 save("research-bases", &board)?;37 Ok(())38}