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}