pub struct WindSock { /* private fields */ }Expand description
Wind condition handler for trajectory calculations
Implementations§
Source§impl WindSock
impl WindSock
Sourcepub fn new(segments: Vec<WindSegment>) -> Self
pub fn new(segments: Vec<WindSegment>) -> Self
Create a new WindSock from wind segments.
Legacy/unchecked entry point (MBA-1338): this constructor is infallible for API
compatibility — a malformed segment is captured as a deferred error that the solver
consumes at its pre-integration validation boundary, but a direct library consumer
gets a constructed sock with no structured signal. Prefer WindSock::try_new
(or TryFrom<Vec<WindSegment>>), which rejects malformed segments up front.
Args: segments: List of (speed_kmh, angle_deg, until_distance_m) tuples
Sourcepub fn try_new(segments: Vec<WindSegment>) -> Result<Self, WindSegmentError>
pub fn try_new(segments: Vec<WindSegment>) -> Result<Self, WindSegmentError>
Create a new WindSock, rejecting malformed segments with a typed error (MBA-1338).
Validation runs before sorting and wind-vector precomputation, and the error’s
index refers to the caller’s own segment ordering. Rejects non-finite or negative
speed_kmh, non-finite angle_deg, non-finite or non-positive until_m, and
non-finite vertical_mps.
Sourcepub fn max_speed_mps(&self) -> f64
pub fn max_speed_mps(&self) -> f64
Upper bound (m/s) on the wind speed any segment can contribute, horizontal plus vertical. Feeds the solver’s integration divergence guard (MBA-1293).
Sourcepub fn vector_for_range(&mut self, range_m: f64) -> Vector3<f64>
pub fn vector_for_range(&mut self, range_m: f64) -> Vector3<f64>
Get wind vector for a given range
Note: This modifies internal state and expects monotonically increasing ranges For trajectory integration, we need a stateless version
Sourcepub fn vector_for_range_stateless(&self, range_m: f64) -> Vector3<f64>
pub fn vector_for_range_stateless(&self, range_m: f64) -> Vector3<f64>
Get wind vector for a given range (stateless version)
This version doesn’t modify internal state and is safe for numerical integration where the same range might be queried multiple times or out of order
Trait Implementations§
Source§impl TryFrom<Vec<WindSegment>> for WindSock
Checked conversion mirroring WindSock::try_new (MBA-1338).
impl TryFrom<Vec<WindSegment>> for WindSock
Checked conversion mirroring WindSock::try_new (MBA-1338).
Auto Trait Implementations§
impl Freeze for WindSock
impl RefUnwindSafe for WindSock
impl Send for WindSock
impl Sync for WindSock
impl Unpin for WindSock
impl UnsafeUnpin for WindSock
impl UnwindSafe for WindSock
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.