lnmp_spatial/
math.rs

1use crate::types::*;
2
3pub fn spatial_distance(p1: &Position3D, p2: &Position3D) -> f32 {
4    let dx = p2.x - p1.x;
5    let dy = p2.y - p1.y;
6    let dz = p2.z - p1.z;
7    (dx * dx + dy * dy + dz * dz).sqrt()
8}
9
10pub fn normalize_vector(v: &Position3D) -> Position3D {
11    let mag = (v.x * v.x + v.y * v.y + v.z * v.z).sqrt();
12    if mag == 0.0 {
13        Position3D {
14            x: 0.0,
15            y: 0.0,
16            z: 0.0,
17        }
18    } else {
19        Position3D {
20            x: v.x / mag,
21            y: v.y / mag,
22            z: v.z / mag,
23        }
24    }
25}
26
27pub fn spatial_intersect(box1: &BoundingBox, box2: &BoundingBox) -> bool {
28    (box1.min_x <= box2.max_x && box1.max_x >= box2.min_x)
29        && (box1.min_y <= box2.max_y && box1.max_y >= box2.min_y)
30        && (box1.min_z <= box2.max_z && box1.max_z >= box2.min_z)
31}