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}