src/main.rs

Mon, 21 Oct 2024 23:07:01 -0500

author
Tuomo Valkonen <tuomov@iki.fi>
date
Mon, 21 Oct 2024 23:07:01 -0500
changeset 11
933242e0f3b8
parent 9
0fa3ac0c248b
child 12
3b05a8b45b95
permissions
-rw-r--r--

Basic face image export

4
e09437844ad9 Forward-backward skeleton
Tuomo Valkonen <tuomov@iki.fi>
parents: 1
diff changeset
1
e09437844ad9 Forward-backward skeleton
Tuomo Valkonen <tuomov@iki.fi>
parents: 1
diff changeset
2 // We use unicode. We would like to use much more of it than Rust allows.
e09437844ad9 Forward-backward skeleton
Tuomo Valkonen <tuomov@iki.fi>
parents: 1
diff changeset
3 // Live with it. Embrace it.
e09437844ad9 Forward-backward skeleton
Tuomo Valkonen <tuomov@iki.fi>
parents: 1
diff changeset
4 #![allow(uncommon_codepoints)]
e09437844ad9 Forward-backward skeleton
Tuomo Valkonen <tuomov@iki.fi>
parents: 1
diff changeset
5 #![allow(mixed_script_confusables)]
e09437844ad9 Forward-backward skeleton
Tuomo Valkonen <tuomov@iki.fi>
parents: 1
diff changeset
6 #![allow(confusable_idents)]
1
29738fae471e Added some missing files
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
7
7
8979a6638424 A simple test
Tuomo Valkonen <tuomov@iki.fi>
parents: 6
diff changeset
8 use dist::DistToSquaredDiv2;
8979a6638424 A simple test
Tuomo Valkonen <tuomov@iki.fi>
parents: 6
diff changeset
9 use fb::forward_backward;
8979a6638424 A simple test
Tuomo Valkonen <tuomov@iki.fi>
parents: 6
diff changeset
10 use manifold::EmbeddedManifoldPoint;
11
933242e0f3b8 Basic face image export
Tuomo Valkonen <tuomov@iki.fi>
parents: 9
diff changeset
11 use cube::*;
933242e0f3b8 Basic face image export
Tuomo Valkonen <tuomov@iki.fi>
parents: 9
diff changeset
12 use image::{
933242e0f3b8 Basic face image export
Tuomo Valkonen <tuomov@iki.fi>
parents: 9
diff changeset
13 ImageFormat,
933242e0f3b8 Basic face image export
Tuomo Valkonen <tuomov@iki.fi>
parents: 9
diff changeset
14 ImageBuffer,
933242e0f3b8 Basic face image export
Tuomo Valkonen <tuomov@iki.fi>
parents: 9
diff changeset
15 Rgb
933242e0f3b8 Basic face image export
Tuomo Valkonen <tuomov@iki.fi>
parents: 9
diff changeset
16 };
7
8979a6638424 A simple test
Tuomo Valkonen <tuomov@iki.fi>
parents: 6
diff changeset
17
1
29738fae471e Added some missing files
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
18 mod manifold;
4
e09437844ad9 Forward-backward skeleton
Tuomo Valkonen <tuomov@iki.fi>
parents: 1
diff changeset
19 mod fb;
1
29738fae471e Added some missing files
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
20 mod cube;
5
f248e1434c3b Some distance functions etc.
Tuomo Valkonen <tuomov@iki.fi>
parents: 4
diff changeset
21 mod dist;
6
df9628092285 Add a zero function on manifolds
Tuomo Valkonen <tuomov@iki.fi>
parents: 5
diff changeset
22 mod zero;
1
29738fae471e Added some missing files
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
23
29738fae471e Added some missing files
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
24 fn main() {
7
8979a6638424 A simple test
Tuomo Valkonen <tuomov@iki.fi>
parents: 6
diff changeset
25 simple_test()
8979a6638424 A simple test
Tuomo Valkonen <tuomov@iki.fi>
parents: 6
diff changeset
26 }
1
29738fae471e Added some missing files
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
27
7
8979a6638424 A simple test
Tuomo Valkonen <tuomov@iki.fi>
parents: 6
diff changeset
28 fn simple_test() {
8979a6638424 A simple test
Tuomo Valkonen <tuomov@iki.fi>
parents: 6
diff changeset
29 use alg_tools::loc::Loc;
8979a6638424 A simple test
Tuomo Valkonen <tuomov@iki.fi>
parents: 6
diff changeset
30 use Face::*;
8979a6638424 A simple test
Tuomo Valkonen <tuomov@iki.fi>
parents: 6
diff changeset
31 use zero::ZeroFn;
11
933242e0f3b8 Basic face image export
Tuomo Valkonen <tuomov@iki.fi>
parents: 9
diff changeset
32 use alg_tools::mapping::{Sum, Apply};
7
8979a6638424 A simple test
Tuomo Valkonen <tuomov@iki.fi>
parents: 6
diff changeset
33 use alg_tools::iterate::{AlgIteratorOptions, Verbose};
8979a6638424 A simple test
Tuomo Valkonen <tuomov@iki.fi>
parents: 6
diff changeset
34
8979a6638424 A simple test
Tuomo Valkonen <tuomov@iki.fi>
parents: 6
diff changeset
35 let points = [
9
0fa3ac0c248b change experiment
Tuomo Valkonen <tuomov@iki.fi>
parents: 7
diff changeset
36 //OnCube::new(F1, Loc([0.5, 0.5])),
0fa3ac0c248b change experiment
Tuomo Valkonen <tuomov@iki.fi>
parents: 7
diff changeset
37 //OnCube::new(F2, Loc([0.5, 0.5])),
0fa3ac0c248b change experiment
Tuomo Valkonen <tuomov@iki.fi>
parents: 7
diff changeset
38 //OnCube::new(F4, Loc([0.1, 0.1])),
7
8979a6638424 A simple test
Tuomo Valkonen <tuomov@iki.fi>
parents: 6
diff changeset
39 OnCube::new(F1, Loc([0.5, 0.5])),
9
0fa3ac0c248b change experiment
Tuomo Valkonen <tuomov@iki.fi>
parents: 7
diff changeset
40 OnCube::new(F3, Loc([0.5, 0.5])),
7
8979a6638424 A simple test
Tuomo Valkonen <tuomov@iki.fi>
parents: 6
diff changeset
41 OnCube::new(F2, Loc([0.5, 0.5])),
8979a6638424 A simple test
Tuomo Valkonen <tuomov@iki.fi>
parents: 6
diff changeset
42 ];
8979a6638424 A simple test
Tuomo Valkonen <tuomov@iki.fi>
parents: 6
diff changeset
43
8979a6638424 A simple test
Tuomo Valkonen <tuomov@iki.fi>
parents: 6
diff changeset
44 //let x = points[0].clone();
9
0fa3ac0c248b change experiment
Tuomo Valkonen <tuomov@iki.fi>
parents: 7
diff changeset
45 // OnCube::new(F3, Loc([0.5, 0.5])); goes to opposite side
0fa3ac0c248b change experiment
Tuomo Valkonen <tuomov@iki.fi>
parents: 7
diff changeset
46 let x = OnCube::new(F3, Loc([0.5, 0.4]));
7
8979a6638424 A simple test
Tuomo Valkonen <tuomov@iki.fi>
parents: 6
diff changeset
47 let f = Sum::new(points.into_iter().map(DistToSquaredDiv2));
8979a6638424 A simple test
Tuomo Valkonen <tuomov@iki.fi>
parents: 6
diff changeset
48 let g = ZeroFn::new();
8979a6638424 A simple test
Tuomo Valkonen <tuomov@iki.fi>
parents: 6
diff changeset
49 let τ = 0.1;
8979a6638424 A simple test
Tuomo Valkonen <tuomov@iki.fi>
parents: 6
diff changeset
50 let iter = AlgIteratorOptions{
8979a6638424 A simple test
Tuomo Valkonen <tuomov@iki.fi>
parents: 6
diff changeset
51 max_iter : 100,
8979a6638424 A simple test
Tuomo Valkonen <tuomov@iki.fi>
parents: 6
diff changeset
52 verbose_iter : Verbose::Every(1),
8979a6638424 A simple test
Tuomo Valkonen <tuomov@iki.fi>
parents: 6
diff changeset
53 .. Default::default()
8979a6638424 A simple test
Tuomo Valkonen <tuomov@iki.fi>
parents: 6
diff changeset
54 };
8979a6638424 A simple test
Tuomo Valkonen <tuomov@iki.fi>
parents: 6
diff changeset
55
8979a6638424 A simple test
Tuomo Valkonen <tuomov@iki.fi>
parents: 6
diff changeset
56 let x̂ = forward_backward(&f, &g, x, τ, iter);
8979a6638424 A simple test
Tuomo Valkonen <tuomov@iki.fi>
parents: 6
diff changeset
57 println!("result = {}\n{:?}", x̂.embedded_coords(), &x̂);
11
933242e0f3b8 Basic face image export
Tuomo Valkonen <tuomov@iki.fi>
parents: 9
diff changeset
58
933242e0f3b8 Basic face image export
Tuomo Valkonen <tuomov@iki.fi>
parents: 9
diff changeset
59 for face in Face::all() {
933242e0f3b8 Basic face image export
Tuomo Valkonen <tuomov@iki.fi>
parents: 9
diff changeset
60 write_face(format!("{face}"), face, 128, |x| f.apply(x) + g.apply(x))
933242e0f3b8 Basic face image export
Tuomo Valkonen <tuomov@iki.fi>
parents: 9
diff changeset
61 }
1
29738fae471e Added some missing files
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
62 }
11
933242e0f3b8 Basic face image export
Tuomo Valkonen <tuomov@iki.fi>
parents: 9
diff changeset
63
933242e0f3b8 Basic face image export
Tuomo Valkonen <tuomov@iki.fi>
parents: 9
diff changeset
64 fn write_face(filename : String, face : Face, n : usize, mut f : impl FnMut(&OnCube) -> f64) {
933242e0f3b8 Basic face image export
Tuomo Valkonen <tuomov@iki.fi>
parents: 9
diff changeset
65 use alg_tools::lingrid::LinSpace;
933242e0f3b8 Basic face image export
Tuomo Valkonen <tuomov@iki.fi>
parents: 9
diff changeset
66 use alg_tools::loc::Loc;
933242e0f3b8 Basic face image export
Tuomo Valkonen <tuomov@iki.fi>
parents: 9
diff changeset
67 use alg_tools::types::*;
933242e0f3b8 Basic face image export
Tuomo Valkonen <tuomov@iki.fi>
parents: 9
diff changeset
68
933242e0f3b8 Basic face image export
Tuomo Valkonen <tuomov@iki.fi>
parents: 9
diff changeset
69 let mut img = ImageBuffer::new(n as u32, n as u32);
933242e0f3b8 Basic face image export
Tuomo Valkonen <tuomov@iki.fi>
parents: 9
diff changeset
70 let grid = LinSpace {
933242e0f3b8 Basic face image export
Tuomo Valkonen <tuomov@iki.fi>
parents: 9
diff changeset
71 start : Loc([0.0, 0.0]),
933242e0f3b8 Basic face image export
Tuomo Valkonen <tuomov@iki.fi>
parents: 9
diff changeset
72 end : Loc([1.0, 1.0]),
933242e0f3b8 Basic face image export
Tuomo Valkonen <tuomov@iki.fi>
parents: 9
diff changeset
73 count : [n, n]
933242e0f3b8 Basic face image export
Tuomo Valkonen <tuomov@iki.fi>
parents: 9
diff changeset
74 };
933242e0f3b8 Basic face image export
Tuomo Valkonen <tuomov@iki.fi>
parents: 9
diff changeset
75 let rawdata : Vec<_> = grid.into_iter()
933242e0f3b8 Basic face image export
Tuomo Valkonen <tuomov@iki.fi>
parents: 9
diff changeset
76 .map(|x| f(&OnCube::new(face, x)))
933242e0f3b8 Basic face image export
Tuomo Valkonen <tuomov@iki.fi>
parents: 9
diff changeset
77 .collect();
933242e0f3b8 Basic face image export
Tuomo Valkonen <tuomov@iki.fi>
parents: 9
diff changeset
78 let a = rawdata.iter().copied().reduce(f64::max).unwrap();
933242e0f3b8 Basic face image export
Tuomo Valkonen <tuomov@iki.fi>
parents: 9
diff changeset
79 img.pixels_mut()
933242e0f3b8 Basic face image export
Tuomo Valkonen <tuomov@iki.fi>
parents: 9
diff changeset
80 .zip(rawdata)
933242e0f3b8 Basic face image export
Tuomo Valkonen <tuomov@iki.fi>
parents: 9
diff changeset
81 .for_each(|(p, v)| {
933242e0f3b8 Basic face image export
Tuomo Valkonen <tuomov@iki.fi>
parents: 9
diff changeset
82 let t = v/a;
933242e0f3b8 Basic face image export
Tuomo Valkonen <tuomov@iki.fi>
parents: 9
diff changeset
83 let rgb = [1.0-t, 1.0-t, 1.0];
933242e0f3b8 Basic face image export
Tuomo Valkonen <tuomov@iki.fi>
parents: 9
diff changeset
84 *p = Rgb(rgb.map(|v| (v*(u8::RANGE_MAX as f64)) as u8))
933242e0f3b8 Basic face image export
Tuomo Valkonen <tuomov@iki.fi>
parents: 9
diff changeset
85 });
933242e0f3b8 Basic face image export
Tuomo Valkonen <tuomov@iki.fi>
parents: 9
diff changeset
86
933242e0f3b8 Basic face image export
Tuomo Valkonen <tuomov@iki.fi>
parents: 9
diff changeset
87 img.save_with_format(format!("{filename}.png"), ImageFormat::Png)
933242e0f3b8 Basic face image export
Tuomo Valkonen <tuomov@iki.fi>
parents: 9
diff changeset
88 .expect("Image save error");
933242e0f3b8 Basic face image export
Tuomo Valkonen <tuomov@iki.fi>
parents: 9
diff changeset
89 }

mercurial