quantized_pathfinding/utils/
quantizer_3d.rs

1use crate::traits::FiniteFloat;
2use crate::utils::quantizer::Quantizer;
3
4#[derive(Debug, Clone, Copy)]
5pub struct Quantizer3d<T: FiniteFloat> {
6    pub quantizer_x: Quantizer<T>,
7    pub quantizer_y: Quantizer<T>,
8    pub quantizer_z: Quantizer<T>,
9}
10
11impl<T: FiniteFloat> Quantizer3d<T> {
12    pub fn with_nnn(vec_a: (T, T, T), vec_b: (T, T, T), nx: usize, ny: usize, nz: usize) -> Self {
13        Quantizer3d {
14            quantizer_x: Quantizer::with_n(vec_a.0, vec_b.0, nx),
15            quantizer_y: Quantizer::with_n(vec_a.1, vec_b.1, ny),
16            quantizer_z: Quantizer::with_n(vec_a.2, vec_b.2, nz),
17        }
18    }
19
20    pub fn with_walls(vec_a: (T, T, T), vec_b: (T, T, T), walls: (usize, usize, usize)) -> Self {
21        Quantizer3d {
22            quantizer_x: Quantizer::with_n(vec_a.0, vec_b.0, walls.0),
23            quantizer_y: Quantizer::with_n(vec_a.1, vec_b.1, walls.1),
24            quantizer_z: Quantizer::with_n(vec_a.2, vec_b.2, walls.2),
25        }
26    }
27
28    pub fn with_step_sizes(vec_a: (T, T, T), vec_b: (T, T, T), ss_x: T, ss_y: T, ss_z: T) -> Self {
29        Quantizer3d {
30            quantizer_x: Quantizer::with_step_size(vec_a.0, vec_b.0, ss_x),
31            quantizer_y: Quantizer::with_step_size(vec_a.1, vec_b.1, ss_y),
32            quantizer_z: Quantizer::with_step_size(vec_a.2, vec_b.2, ss_z),
33        }
34    }
35
36    pub fn quantize(&self, vec: (T, T, T)) -> (usize, usize, usize) {
37        (
38            self.quantizer_x.quantize(vec.0),
39            self.quantizer_y.quantize(vec.1),
40            self.quantizer_z.quantize(vec.2),
41        )
42    }
43
44    pub fn dequantize(&self, vec_n: (usize, usize, usize)) -> (T, T, T) {
45        (
46            self.quantizer_x.dequantize(vec_n.0),
47            self.quantizer_y.dequantize(vec_n.1),
48            self.quantizer_z.dequantize(vec_n.2),
49        )
50    }
51}
52
53// for convenience
54pub type Quantizer3dF32 = Quantizer3d<f32>;
55pub type Quantizer3dF64 = Quantizer3d<f64>;
56