site-research.rs
1.7 kB · rust · 60 lines
1use mrlycore::errors::Result;2use mrlycore::Color;3use mrlyfig::board::{Board, Frame};4use mrlyfig::ink::Ramp;5use mrlyfig::{field, ink, save};6use mrlylab::moire::stack::stack;7use mrlylab::moire::{Combine, Field, Lattice, Spec};89const SCALES: usize = 20;10const SHEET: usize = 1075;11const START: usize = 215;12const SIZE: usize = 860;1314fn window(sheet: &Field, start: usize, size: usize) -> Vec<f64> {15 let mut out = Vec::with_capacity(size * size);16 for row in 0..size {17 let base = (start + row) * sheet.size + start;18 for col in 0..size {19 out.push(sheet.data[base + col] as f64);20 }21 }22 out23}2425fn main() -> Result<()> {26 let numbers: Vec<usize> = (1..=SCALES).collect();27 let sheet = stack(28 Spec::new(495, 3, 2),29 &numbers,30 Combine::Sum,31 1,32 Lattice::Square,33 SHEET,34 &[],35 )?;36 assert_eq!(sheet.max() as usize, SCALES);3738 let values = window(&sheet, START, SIZE);39 assert_eq!(values.len(), SIZE * SIZE);40 let hi = SCALES as f64;41 let lo = values.iter().copied().fold(f64::MAX, f64::min);42 assert!(values.contains(&hi));43 let levels = (hi - lo) as usize + 1;4445 let mut stops: Vec<Color> = (0..levels - 1)46 .map(|i| {47 let t = i as f64 / (levels - 2) as f64;48 ink::mix(ink::ground(), ink::blue(), 0.20 + 0.80 * t.powf(2.1))49 })50 .collect();51 stops.push(ink::yellow());52 let ramp = Ramp::new(stops);5354 let mut board = Board::square();55 let edge = (board.width as f64 - SIZE as f64) / 2.0;56 let frame = Frame::new(edge, edge, SIZE as f64, SIZE as f64);57 field::draw_range(&mut board, frame, SIZE, SIZE, &values, (lo, hi), &ramp);58 save("site-research", &board)?;59 Ok(())60}