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}