use aabb::prelude::*;
use std::time::Instant;
fn main() {
println!("Building large spatial index...");
let mut tree = AABB::with_capacity(1_000_000);
let mut rng = 12345u64; for _ in 0..1_000_000 {
rng = rng.wrapping_mul(6364136223846793005).wrapping_add(1442695040888963407);
let x1 = ((rng >> 32) as f64 / u32::MAX as f64) * 1000.0;
rng = rng.wrapping_mul(6364136223846793005).wrapping_add(1442695040888963407);
let y1 = ((rng >> 32) as f64 / u32::MAX as f64) * 1000.0;
rng = rng.wrapping_mul(6364136223846793005).wrapping_add(1442695040888963407);
let size_x = ((rng >> 32) as f64 / u32::MAX as f64) * 50.0 + 1.0;
rng = rng.wrapping_mul(6364136223846793005).wrapping_add(1442695040888963407);
let size_y = ((rng >> 32) as f64 / u32::MAX as f64) * 50.0 + 1.0;
tree.add(x1, y1, x1 + size_x, y1 + size_y);
}
let build_start = Instant::now();
tree.build();
let build_duration = build_start.elapsed();
let mut results = Vec::new();
let query_start = Instant::now();
for _i in 0..100_000 {
rng = rng.wrapping_mul(6364136223846793005).wrapping_add(1442695040888963407);
let center_x = ((rng >> 32) as f64 / u32::MAX as f64) * 1000.0;
rng = rng.wrapping_mul(6364136223846793005).wrapping_add(1442695040888963407);
let center_y = ((rng >> 32) as f64 / u32::MAX as f64) * 1000.0;
let query_size = 100.0; let min_x = (center_x - query_size / 2.0).max(0.0);
let min_y = (center_y - query_size / 2.0).max(0.0);
let max_x = (center_x + query_size / 2.0).min(1000.0);
let max_y = (center_y + query_size / 2.0).min(1000.0);
tree.query_intersecting(min_x, min_y, max_x, max_y, &mut results);
}
let query_duration = query_start.elapsed();
println!(
"\nCompleted 100,000 queries in {:.2}ms ({:.2}µs per query)",
query_duration.as_secs_f64() * 1000.0,
query_duration.as_secs_f64() * 1_000_000.0 / 100_000.0
);
println!("\nProfile Summary:");
println!(" Building: {:.2}ms", build_duration.as_secs_f64() * 1000.0);
println!(" Querying: {:.2}ms", query_duration.as_secs_f64() * 1000.0);
println!(" Total: {:.2}ms", (build_duration + query_duration).as_secs_f64() * 1000.0);
}