Files
SPLAT-Parallel-with-Rust/examples/udt_debug.rs
T
cescobar 9d7d3bac45 Commit inicial: splat-rs — fork/port a Rust de SPLAT!
Fork de SPLAT! (John A. Magliacane, KD2BD, 2002-2014), bajo GPLv2 heredada
del original. El núcleo de cálculo de propagación (ITWOM v3.0, Sid Shumate)
se mantiene sin modificar en cpp/itwom3.0.cpp, llamado vía FFI. El resto
del pipeline (lectura de formatos SPLAT!, reportes, mapas, KML, gnuplot)
se reescribió en Rust, con paralelización nativa vía rayon reemplazando
el paralelismo por múltiples procesos del original. Validado contra el
corpus golden de SPLAT! con drift < 0.02 dB en cálculos ITWOM.
2026-08-23 01:50:41 -05:00

30 lines
1.1 KiB
Rust

use splat::{geo, radial::DemLookup, sdf::DemTileSet, udt};
fn main() {
let mut base = DemTileSet::new();
base.load_dir("/home/cescobar/Laboratorio/splat-1.4.2-Charles/sdf").unwrap();
let fs = udt::load("/tmp/test-obstacle.udt").unwrap();
let wrapped = udt::DemWithUdt::new(&base, fs, 1200);
let tx = (-1.023206, 79.458669);
let rx = (-1.698611, 79.107222);
let az_from_rx = geo::azimuth(rx.0, rx.1, tx.0, tx.1);
let dist_mi = geo::distance(tx.0, tx.1, rx.0, rx.1);
println!("dist {:.2} mi, az from rx {:.2}°", dist_mi, az_from_rx);
// Sample 20 points along the path from RX to TX; print the elevation
// via the UDT-wrapped DEM at each sample point.
let mut prev_z = 0.0;
for i in 0..=20 {
let d_mi = (i as f64 / 20.0) * dist_mi;
let (lat, lon) = geo::step_great_circle(rx.0, rx.1, az_from_rx, d_mi);
let z = wrapped.elevation(lat, lon);
let mark = if z > prev_z + 1000.0 { " ← UDT HIT" } else { "" };
println!(
" d={:5.1} mi ({:.4}, {:.4}) z={:.0}m{}",
d_mi, lat, lon, z, mark,
);
prev_z = z;
}
}