use plotpy::{Curve, Plot, RayEndpoint, Text};
use russell_lab::math::GOLDEN_RATIO;
use russell_lab::*;
const OUT_DIR: &str = "/tmp/russell_lab/";
fn main() -> Result<(), StrError> {
let nn = 8;
let npoint = nn + 1;
let y_cg: Vec<_> = (0..npoint).into_iter().map(|_| 1.0).collect();
let y_cgl: Vec<_> = (0..npoint).into_iter().map(|_| 0.0).collect();
let x_cg = math::chebyshev_gauss_points(nn);
let mut curve_cg = Curve::new();
curve_cg
.set_label("Chebyshev-Gauss")
.set_line_style("None")
.set_marker_style("o")
.set_marker_line_color("blue")
.set_marker_void(true)
.draw(x_cg.as_data(), &y_cg);
println!("\nChebyshev-Gauss points =\n{:.3?}", x_cg.as_data());
let x_cgl = math::chebyshev_lobatto_points(nn);
let mut curve_cgl = Curve::new();
curve_cgl
.set_label("Chebyshev-Gauss-Lobatto")
.set_line_style("None")
.set_marker_style("o")
.set_marker_void(true)
.draw(x_cgl.as_data(), &y_cgl);
println!("\nChebyshev-Gauss-Lobatto points =\n{:.3?}\n", x_cgl.as_data());
let mut v_lines = Curve::new();
v_lines.set_line_color("#83C3A1").set_line_style("--");
for x in &x_cgl {
v_lines.draw_ray(*x, 0.0, RayEndpoint::Vertical);
}
let mut text = Text::new();
text.set_bbox(true)
.set_bbox_facecolor("pink")
.set_bbox_edgecolor("black");
text.draw(-1.0, 4.0, &format!("$N = {}$", nn));
let path = format!("{}/math_chebyshev_points.svg", OUT_DIR);
let mut plot = Plot::new();
plot.add(&v_lines)
.add(&curve_cg)
.add(&curve_cgl)
.add(&text)
.legend()
.set_hide_yticks()
.set_yrange(-5.0, 5.0)
.set_figure_size_points(GOLDEN_RATIO * 280.0, 280.0)
.save(&path)?;
Ok(())
}