quantized_pathfinding/utils/
quantizer_3d.rs1use 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
53pub type Quantizer3dF32 = Quantizer3d<f32>;
55pub type Quantizer3dF64 = Quantizer3d<f64>;
56