poincare-app 0.2.0

Interactive 3D mathematical graphing application
use std::f64::consts::PI;

use poincare_lib::{ColourMode, Domain, MatcapSource, PlotStyle, Resolution, ShadingMode};
use viewport_lib::BuiltinMatcap;

use crate::plot::entry::PlotEntry;
use crate::plot::kind::PlotKind;

pub fn build() -> Vec<PlotEntry> {
    vec![
        PlotEntry {
            name: "Studio Torus".to_string(),
            visible: true,
            domain: Domain {
                x: 0.0..=(2.0 * PI),
                y: 0.0..=(2.0 * PI),
                z: -1.4..=1.4,
            },
            resolution: Resolution { u: 100, v: 52 },
            style: PlotStyle {
                colour_mode: ColourMode::Solid([0.90, 0.78, 0.66, 1.0]),
                two_sided: true,
                shading: ShadingMode::Smooth,
                matcap: Some(MatcapSource::Builtin(BuiltinMatcap::Wax)),
                ..PlotStyle::default()
            },
            kind: PlotKind::ExprParametricSurface {
                expression: "(2.4+0.55*cos(v))*cos(u)|(2.4+0.55*cos(v))*sin(u)|0.55*sin(v)"
                    .to_string(),
                parameters: Vec::new(),
            },
        },
        PlotEntry {
            name: "Reference Helix".to_string(),
            visible: true,
            domain: Domain::default(),
            resolution: Resolution { u: 320, v: 2 },
            style: PlotStyle {
                colour_mode: ColourMode::Solid([0.95, 0.95, 0.98, 1.0]),
                line_width: 2.0,
                ..PlotStyle::default()
            },
            kind: PlotKind::ExprCurve {
                expression: "(1.5*cos(t), 1.5*sin(t), -1.2 + t/(3*pi))".to_string(),
                parameters: Vec::new(),
                t_range: (0.0, 6.0 * PI),
            },
        },
    ]
}