paper-moire-correlation-laws.rs

1.2 kB · rust · 40 lines

1use mrlycore::errors::Result;2use mrlyfig::board::{Board, Frame};3use mrlyfig::ink::Ramp;4use mrlyfig::{field, ink, save};5use mrlylab::moire::pairs::correlation;67const SCALES: usize = 31;8const CELL: f64 = 28.0;910fn main() -> Result<()> {11    let odds: Vec<usize> = (3..=63).step_by(2).collect();12    assert_eq!(odds.len(), SCALES);13    assert_eq!(correlation(3, 5), 0.0);14    assert!((correlation(9, 9) - 1.0).abs() < 1e-12);15    let mut values = Vec::with_capacity(SCALES * SCALES);16    for &m in &odds {17        for &n in &odds {18            let r = correlation(m, n);19            values.push(if r <= 0.0 { 0.0 } else { 0.5 + 0.5 * r.sqrt() });20        }21    }22    assert_eq!(values.iter().filter(|&&v| v == 0.0).count(), 762);2324    let ramp = Ramp::new(vec![ink::ground(), ink::blue(), ink::yellow()]);25    let mut board = Board::square();26    let side = CELL * SCALES as f64;27    let edge = (board.width as f64 - side) / 2.0;28    let frame = Frame::new(edge, edge, side, side);29    field::draw_range(30        &mut board,31        frame,32        SCALES,33        SCALES,34        &values,35        (0.0, 1.0),36        &ramp,37    );38    save("paper-moire-correlation-laws", &board)?;39    Ok(())40}