paper-slice-recurrence-order.rs

1.4 kB · rust · 43 lines

1use mrlycore::errors::Result;2use mrlyfig::{ink, save, Board};34fn main() -> Result<()> {5    let mut board = Board::square();6    let frame = board.frame(0.08);7    let dims: Vec<usize> = (2..=14).collect();8    let free: Vec<usize> = dims.iter().map(|d| 2 * d + 1).collect();9    let proved: Vec<usize> = dims.iter().map(|d| d.div_ceil(2)).collect();10    assert_eq!(free.first(), Some(&5));11    assert_eq!(free.last(), Some(&29));12    assert_eq!(proved, vec![1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7]);1314    let peak = *free.last().unwrap() as f64;15    let slot = frame.w / dims.len() as f64;16    let foot = frame.y + frame.h;17    let unit = frame.h / peak;18    for (index, order) in free.iter().enumerate() {19        let wide = slot * 0.62;20        let tall = *order as f64 * unit;21        board.rect(22            frame.x + index as f64 * slot + (slot - wide) / 2.0,23            foot - tall,24            wide,25            tall,26            ink::fade(ink::dim(), 0.45),27        );28    }29    for (index, order) in proved.iter().enumerate() {30        let wide = slot * 0.26;31        let tall = *order as f64 * unit;32        board.rect(33            frame.x + index as f64 * slot + (slot - wide) / 2.0,34            foot - tall,35            wide,36            tall,37            ink::blue(),38        );39    }40    board.rect(frame.x, foot, frame.w, 2.0, ink::line());41    save("paper-slice-recurrence-order", &board)?;42    Ok(())43}