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}