#![allow(clippy::print_stdout)]
use optica::grid::{Grid2D, OutOfRange};
use qtty::unit::{Nanometer, Radian, Ratio};
use qtty::Quantity;
fn main() {
let lam_nm = [400.0_f64, 550.0, 700.0];
let za_rad = [
0.0_f64,
std::f64::consts::FRAC_PI_4,
std::f64::consts::FRAC_PI_2,
];
#[rustfmt::skip]
let values = [
0.90_f64, 0.95, 0.97,
0.78, 0.85, 0.90,
0.00, 0.00, 0.00,
];
let grid = Grid2D::<Nanometer, Radian, Ratio>::from_raw_row_major(
&lam_nm,
&za_rad,
&values,
OutOfRange::ClampToEndpoints,
)
.expect("valid grid");
println!(
"Grid: {}×{} (wavelength × zenith angle)",
grid.nx(),
grid.ny()
);
let queries = [
(475.0_f64, 0.0_f64),
(550.0, std::f64::consts::FRAC_PI_4),
(625.0, std::f64::consts::FRAC_PI_4 / 2.0),
];
for (lam, za) in queries {
let t = grid.interp_at(Quantity::<Nanometer>::new(lam), Quantity::<Radian>::new(za));
println!(" T({lam:.0} nm, {:.2} rad) = {:.4}", za, t.value());
}
}