1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
mod img_funs;
mod building_blocks;
mod snd_funs;
mod eeg_19c_funs;

pub use crate::img_funs::*;
pub use crate::building_blocks::*;
pub use crate::snd_funs::*;
pub use crate::eeg_19c_funs::*;


#[cfg(test)]
mod tests {
use super::*;

    #[test]
    fn wtf() {assert!(true);}

    #[test]
    fn img_sorta() {
        use noise::Fbm;
        use noise::utils::*;
        use noise::MultiFractal;
        use itertools::Itertools;
        
        let mut dur = std::time::Duration::from_millis(0);
        for x in 0..10 {
            let clamp = |x, lower, upper| if x < lower {lower} else if x > upper {upper} else {x};
            let size_x = 1024;
            let size_y = size_x;
            let fbm = Fbm::new().set_octaves(32).set_persistence(x as f64 / 10.);
            let pmb = PlaneMapBuilder::new(&fbm).set_size(size_x as usize, size_y as usize).build();
            let pix_span =     (0..size_x as usize).cartesian_product(0..size_y as usize);
            let mut result = image::GrayImage::new(size_x as u32, size_y as u32);
            pix_span.clone()
                .map(|(xx, yy)| pmb.get_value(xx, yy))
                .map(|val| (val+1.0)*128.0)
                .map(|val| (clamp(val, 0.0, 255.99)) as u8)
                .zip(pix_span)
                .for_each(|(val, (xx, yy))| result.put_pixel(xx as u32, yy as u32, image::Luma([val])));
            drop((pmb, fbm));
            
            let begin = std::time::Instant::now();
            let (hrm, _, _) = measure_lum_2d_u8_image(result);
            dur += begin.elapsed();
            dbg!(hrm);
        }
        println!("Time elapsed: {:?}", dur);
        
        use noise::Seedable;
        let mut dur = std::time::Duration::from_millis(0);
        for x in 0..10 {
            let clamp = |x, lower, upper| if x < lower {lower} else if x > upper {upper} else {x};
            let size_x = 1<<10;
            let size_y = size_x;
            let fbm_1 = Fbm::new().set_octaves(32).set_persistence(x as f64 / 10.).set_seed(0);
            let fbm_2 = Fbm::new().set_octaves(32).set_persistence(x as f64 / 10.).set_seed(1);
            let fbm_3 = Fbm::new().set_octaves(32).set_persistence(x as f64 / 10.).set_seed(2);
            let pmb_1 = PlaneMapBuilder::new(&fbm_1).set_size(size_x as usize, size_y as usize).build();
            let pmb_2 = PlaneMapBuilder::new(&fbm_2).set_size(size_x as usize, size_y as usize).build();
            let pmb_3 = PlaneMapBuilder::new(&fbm_3).set_size(size_x as usize, size_y as usize).build();
            let pix_span =     (0..size_x as usize).cartesian_product(0..size_y as usize);
            let mut result = image::RgbImage::new(size_x as u32, size_y as u32);
            let map_fn = |val: f64| (val+1.0)*128.0;
            let map_fn = |val: f64| clamp(map_fn(val), 0.0, 255.99) as u8;
            let map_fn = |x: [f64; 3]| [map_fn(x[0]), map_fn(x[1]), map_fn(x[2])];
            pix_span.clone()
                .map(|(xx, yy)| [pmb_1.get_value(xx, yy), pmb_2.get_value(xx, yy), pmb_3.get_value(xx, yy)])
                .map(map_fn)
                .zip(pix_span)
                .for_each(|(val, (xx, yy))| result.put_pixel(xx as u32, yy as u32, image::Rgb(val)));
            drop((pmb_1, fbm_1, pmb_2, fbm_2, pmb_3, fbm_3));
            
            let begin = std::time::Instant::now();
            let (hrm, _, _) = measure_rgb_2d_u8_image(result);
            dur += begin.elapsed();
            dbg!(hrm);
        }
        println!("Time elapsed: {:?}", dur);
    } 
}