sine_curve/
sine_curve.rs

1use colorimetry_plot::{chart::XYChart, style_attr::class, svgdoc::SvgDocument};
2
3const STYLE: &str = include_str!("sine_curve.scss");
4
5pub fn main() -> Result<(), Box<dyn std::error::Error>> {
6    let pi = std::f64::consts::PI;
7    let pi2 = 2.0 * pi;
8
9    const N: i32 = 100;
10    let sin: Vec<(f64, f64)> = (0..N)
11        .map(|i| {
12            let x = i as f64 * pi2 / (N as f64 - 1.0);
13            (x, x.sin())
14        })
15        .collect();
16
17    let chart = XYChart::new((600, 300), (..pi2, -1.1..1.1))
18        .x_labels(1.0, 10, None)
19        .y_labels(0.5, 10, None)
20        .x_axis_description("x", None)
21        .y_axis_description("sin(x)", None)
22        .plot_grid(0.2, 0.1, class("fine-grid"))
23        .plot_grid(1.0, 0.5, class("grid"))
24        .plot_poly_line(sin, class("curve"))
25        .plot_poly_line(vec![(0.0, 0.0), (pi2, 0.0)], class("base-line"));
26
27    SvgDocument::new()
28        .append_scss(STYLE)
29        .add_plot(Box::new(chart))
30        .save("docs/img/sine_curve.svg")
31}