pub fn mach_1_crossing_range_m(result: &TrajectoryResult) -> Option<f64>Expand description
The downrange distance (meters) where the trajectory’s station Mach first drops below 1.0 (the “crossed_subsonic” transition), linearly interpolated between the bracketing solved points.
Mirrors MachTransitionTracker::record_downward_crossings’s crossed_subsonic event
(cli_api.rs ~1744), reimplemented here because that tracker is a private
cli_api.rs type, and the crossing distances it collects (transonic_distances)
aren’t retained on TrajectoryResult itself — they’re only consumed to flag
TrajectorySamples (trajectory_sampling::add_trajectory_flags), which requires
trajectory sampling to be enabled. solve_profile_for_dsf solves with sampling off
(it only needs result.points), so this recomputes the same crossing from the plain
points array using the identical Mach divisor apply_dsf and the observation path
use (velocity_magnitude / station_speed_of_sound_mps).
Returns None if the trajectory never goes subsonic within the solved points (still
supersonic/transonic at the last point, an empty/degenerate solve, or a non-finite
station speed of sound).