rant_simulator/scan/adapters/
mod.rs

1use super::ParameterAdapter;
2
3#[derive(Clone, Copy)]
4pub struct ParameterAdapter1DEven<State, Parameters> {
5    pub start: f64,
6    pub end: f64,
7    pub construct_initial_state_and_parameters: fn(f64) -> (State, Parameters), // TODO: think of better strategy
8}
9
10impl<State, Parameters> ParameterAdapter<State, Parameters>
11    for ParameterAdapter1DEven<State, Parameters>
12{
13    type Vector = (usize, usize);
14
15    fn compute_initial_state_and_parameters(
16        &self,
17        (x, resolution): Self::Vector,
18    ) -> (State, Parameters) {
19        let x = lin_int(self.start, self.end, x, resolution);
20        (self.construct_initial_state_and_parameters)(x)
21    }
22}
23
24#[derive(Clone, Copy)]
25pub struct ParameterAdapter2DEven<State, Parameters> {
26    pub start: (f64, f64),
27    pub end: (f64, f64),
28    pub construct_initial_state_and_parameters: fn(f64, f64) -> (State, Parameters), // TODO: think of better strategy
29}
30
31impl<State, Parameters> ParameterAdapter<State, Parameters>
32    for ParameterAdapter2DEven<State, Parameters>
33{
34    type Vector = [(usize, usize); 2];
35
36    fn compute_initial_state_and_parameters(
37        &self,
38        [(x, resolution_x), (y, resolution_y)]: Self::Vector,
39    ) -> (State, Parameters) {
40        let x = lin_int(self.start.0, self.end.0, x, resolution_x);
41        let y = lin_int(self.start.1, self.end.1, y, resolution_y);
42        (self.construct_initial_state_and_parameters)(x, y)
43    }
44}
45
46fn lin_int(a: f64, b: f64, x: usize, resolution: usize) -> f64 {
47    a + (x as f64 / resolution as f64) * (b - a)
48}