59 lines
2.1 KiB
Rust
59 lines
2.1 KiB
Rust
#![allow(missing_docs)]
|
|
|
|
use glam::DVec2;
|
|
use road_parceling::{subdivide_all_with_stats, RoadGraph, SubdivisionParams};
|
|
|
|
fn rect(g: &mut RoadGraph, x0: f64, y0: f64, w: f64, h: f64) {
|
|
let a = g.add_node(DVec2::new(x0, y0));
|
|
let b = g.add_node(DVec2::new(x0 + w, y0));
|
|
let c = g.add_node(DVec2::new(x0 + w, y0 + h));
|
|
let d = g.add_node(DVec2::new(x0, y0 + h));
|
|
g.add_road(a, b).unwrap();
|
|
g.add_road(b, c).unwrap();
|
|
g.add_road(c, d).unwrap();
|
|
g.add_road(d, a).unwrap();
|
|
}
|
|
|
|
fn main() {
|
|
let mut single = RoadGraph::new();
|
|
rect(&mut single, 0.0, 0.0, 200.0, 100.0);
|
|
single.rebuild_topology().unwrap();
|
|
let params = SubdivisionParams::default();
|
|
// warm
|
|
for _ in 0..5 {
|
|
let _ = subdivide_all_with_stats(&single, ¶ms).unwrap();
|
|
}
|
|
let (_, s) = subdivide_all_with_stats(&single, ¶ms).unwrap();
|
|
println!("single rectangle: {} blocks, {} parcels, total {:.1}us, topo {:.1}us, blocks {:.1}us, sub {:.1}us, {:.0} parcels/s",
|
|
s.block_count, s.parcel_count, s.total.as_secs_f64()*1e6, s.topology_rebuild.as_secs_f64()*1e6,
|
|
s.block_extraction.as_secs_f64()*1e6, s.block_subdivide_total.as_secs_f64()*1e6, s.parcels_per_second());
|
|
println!(" → {:.2} us/parcel", s.time_per_parcel_us());
|
|
|
|
// 5x5 grid of small blocks — quickly approaches 25 blocks
|
|
let mut grid = RoadGraph::new();
|
|
for i in 0..5 {
|
|
for j in 0..5 {
|
|
rect(
|
|
&mut grid,
|
|
(i as f64) * 220.0,
|
|
(j as f64) * 120.0,
|
|
200.0,
|
|
100.0,
|
|
);
|
|
}
|
|
}
|
|
grid.rebuild_topology().unwrap();
|
|
for _ in 0..3 {
|
|
let _ = subdivide_all_with_stats(&grid, ¶ms).unwrap();
|
|
}
|
|
let (_, s) = subdivide_all_with_stats(&grid, ¶ms).unwrap();
|
|
println!(
|
|
"5x5 grid (25 disjoint blocks): {} blocks, {} parcels, total {:.1}us, {:.0} parcels/s",
|
|
s.block_count,
|
|
s.parcel_count,
|
|
s.total.as_secs_f64() * 1e6,
|
|
s.parcels_per_second()
|
|
);
|
|
println!(" → {:.2} us/parcel", s.time_per_parcel_us());
|
|
}
|