1use bland::{Figure, PolarGridOpts, Stroke};
2
3fn main() {
4 let n = 200;
6 let thetas: Vec<f64> = (0..=n)
7 .map(|i| i as f64 / n as f64 * std::f64::consts::TAU)
8 .collect();
9 let rs: Vec<f64> = thetas.iter().map(|t| 1.0 + t.cos()).collect();
10
11 let rose: Vec<f64> = thetas.iter().map(|t| (3.0 * t).cos().abs() * 1.5).collect();
13
14 let fig = Figure::polar(2.1)
15 .title("Polar plots")
16 .polar_grid(PolarGridOpts::default())
17 .line(&thetas, &rs, |s| s.label("r = 1 + cos θ").stroke(Stroke::Solid))
18 .line(&thetas, &rose, |s| {
19 s.label("r = |cos 3θ|").stroke(Stroke::Dashed)
20 })
21 .legend_bottom_left();
22
23 std::fs::create_dir_all("out").expect("create out/");
24 std::fs::write("out/polar.svg", fig.to_svg()).expect("write svg");
25 println!("wrote out/polar.svg");
26}