src/main.rs

changeset 11
933242e0f3b8
parent 9
0fa3ac0c248b
child 12
3b05a8b45b95
--- a/src/main.rs	Mon Oct 21 15:07:41 2024 -0500
+++ b/src/main.rs	Mon Oct 21 23:07:01 2024 -0500
@@ -8,6 +8,12 @@
 use dist::DistToSquaredDiv2;
 use fb::forward_backward;
 use manifold::EmbeddedManifoldPoint;
+use cube::*;
+use image::{
+    ImageFormat,
+    ImageBuffer,
+    Rgb
+};
 
 mod manifold;
 mod fb;
@@ -20,11 +26,10 @@
 }
 
 fn simple_test() {
-    use cube::*;
     use alg_tools::loc::Loc;
     use Face::*;
     use zero::ZeroFn;
-    use alg_tools::mapping::Sum;
+    use alg_tools::mapping::{Sum, Apply};
     use alg_tools::iterate::{AlgIteratorOptions, Verbose};
     
     let points = [
@@ -50,4 +55,35 @@
 
     let x̂ = forward_backward(&f, &g, x, τ, iter);
     println!("result = {}\n{:?}", x̂.embedded_coords(), &x̂);
+
+    for face in Face::all() {
+        write_face(format!("{face}"), face, 128, |x| f.apply(x) + g.apply(x))
+    }
 }
+
+fn write_face(filename : String, face : Face, n : usize, mut f : impl FnMut(&OnCube) -> f64) {
+    use alg_tools::lingrid::LinSpace;
+    use alg_tools::loc::Loc;
+    use alg_tools::types::*;
+
+    let mut img = ImageBuffer::new(n as u32, n as u32);
+    let grid = LinSpace {
+        start : Loc([0.0, 0.0]),
+        end : Loc([1.0, 1.0]),
+        count : [n, n]
+    };
+    let rawdata : Vec<_> = grid.into_iter()
+                               .map(|x| f(&OnCube::new(face, x)))
+                               .collect();
+    let a = rawdata.iter().copied().reduce(f64::max).unwrap();
+    img.pixels_mut()
+        .zip(rawdata)
+        .for_each(|(p, v)| {
+            let t = v/a;
+            let rgb = [1.0-t, 1.0-t, 1.0];
+            *p = Rgb(rgb.map(|v| (v*(u8::RANGE_MAX as f64)) as u8))
+        });
+
+    img.save_with_format(format!("{filename}.png"), ImageFormat::Png)
+        .expect("Image save error");
+}

mercurial