astroimsim-data 0.1.7

Data package for astroimsim ecosystem.
Documentation
use astroimsim_geometry::coordinate_system::{CoordinateSystem, Coordinates};
use astroimsim_geometry::coordinate_system::Coordinates::RELATIVE;
use astroimsim_geometry::grid2d::GRID2D;
use astroimsim_geometry::*;
use astroimsim_geometry::points::Point;

use crate::spatial_effect::SpatialEffect;

pub fn test_2d_interpolation() {
    let coordinates = CoordinateSystem::new(
        (0.0, 1.0),
        (1.0, 0.0),
        (0.0, 0.0),
        "test coords",
        "red",
    );

    let test_grid = GRID2D::new_empty((100, 100), (0.010, 0.010), (10.0, 10.0), 0.45, RELATIVE(coordinates));
    let mut matrix = Vec::new();
    for row in 0..test_grid.y_num{
        let mut row_vec = Vec::new();
        for column in 0..test_grid.x_num{
            let point = test_grid.locate(test_grid.grid_number(column,row));
            row_vec.push(test_function(&point))

        }
        matrix.push(row_vec)
    }

    let data_grid = SpatialEffect::from_matrix("data grid", test_grid.clone(), "NA", matrix);

    println!("data grid is :{:?}",data_grid);


    for i in 0..100{
        let point = test_grid.random();
        let datum1 = data_grid.get_data(&point);
        let datum2 = test_function(&point);
        println!(" {:?} {:?}   {:?}  {:?}",test_grid.fit_grid(&point), datum1,datum2, 100.0*(datum2-datum1)/datum2)
    }
}

pub fn test_function(point: &Point)-> f64{
    let (x,y) = point.to_absolute().values();
    let result = x.powi(3) + y.powi(2);
    if result.is_nan(){
        println!("{:?} gave NaN",(x,y))
    }
    result
}