Skip to main content

contour/
contour.rs

1use bland::{Figure, PaperSize};
2
3fn main() {
4    // 41×41 grid of sin(x) · cos(y) over [-π, π]².
5    let n = 41;
6    let pi = std::f64::consts::PI;
7    let grid: Vec<Vec<f64>> = (0..n)
8        .map(|j| {
9            let y = -pi + 2.0 * pi * j as f64 / (n - 1) as f64;
10            (0..n)
11                .map(|i| {
12                    let x = -pi + 2.0 * pi * i as f64 / (n - 1) as f64;
13                    x.sin() * y.cos()
14                })
15                .collect()
16        })
17        .collect();
18
19    let edges: Vec<f64> = (0..=n)
20        .map(|i| -pi + 2.0 * pi * i as f64 / n as f64)
21        .collect();
22
23    let levels = vec![-0.8, -0.4, 0.0, 0.4, 0.8];
24
25    let fig = Figure::new()
26        .size(PaperSize::Square)
27        .title("sin(x) · cos(y)")
28        .xlabel("x")
29        .ylabel("y")
30        .contour(grid, |c| {
31            c.x_edges(edges.clone())
32                .y_edges(edges.clone())
33                .levels(levels)
34                .label("isolines")
35        })
36        .legend_top_right();
37
38    std::fs::create_dir_all("out").expect("create out/");
39    std::fs::write("out/contour.svg", fig.to_svg()).expect("write svg");
40    println!("wrote out/contour.svg");
41}