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}