pub struct ShotV1 {
pub max_range_m: f64,
pub zero_distance_m: Option<f64>,
pub muzzle_angle_rad: Option<f64>,
pub aim_azimuth_rad: Option<f64>,
pub shot_azimuth_rad: Option<f64>,
pub shooting_angle_rad: Option<f64>,
pub cant_angle_rad: Option<f64>,
pub target_height_m: Option<f64>,
pub ground_threshold_m: Option<f64>,
pub zero_poi_up_m: Option<f64>,
pub zero_poi_right_m: Option<f64>,
pub drops_reference: Option<DropsReferenceV1>,
}Expand description
Shot geometry and termination range.
Fields§
§max_range_m: f64§zero_distance_m: Option<f64>§muzzle_angle_rad: Option<f64>§aim_azimuth_rad: Option<f64>§shot_azimuth_rad: Option<f64>§shooting_angle_rad: Option<f64>§cant_angle_rad: Option<f64>§target_height_m: Option<f64>World-vertical height above the local ground datum that the elevation search converges
the bullet to at zero_distance_m.
Omitting it while the search runs (zero_distance_m present, muzzle_angle_rad absent)
defaults it to the LINE OF SIGHT of a level rifle — RifleV1::muzzle_height_m plus
RifleV1::sight_height_m — so a level shot’s solved trajectory crosses the line of
sight at the zero distance, which is what a stated zero means and what the CLI and C ABI
zero surfaces already did (MBA-1537). A supplied value always wins, 0.0 included: that
is how a caller asks for a zero against the ground datum instead. The default raises a
default_applied assumption naming the height it used.
The default is a LEVEL line of sight in a world-vertical field, so an inclined zero
still needs this stated — see docs/SOLVE_JSON_V1.md for the projection to supply.
With no elevation search this still defaults to 0, where it feeds only the
drops_reference: "target" sampler datum — which references max_range_m, not
zero_distance_m.
ground_threshold_m: Option<f64>§zero_poi_up_m: Option<f64>Deliberate vertical POI offset AT the zero range, meters (MBA-1359, Kestrel “zero
height”): positive = the rifle is deliberately zeroed to impact HIGH by this much at
zero_distance_m. Meaningful only when zero_distance_m is supplied. Omitted (the
default) is byte-identical to pre-MBA-1359 behavior. Echoed at
ResolvedShotV1::zero_poi_up_m when supplied (0.33.0 decision-support Task 1).
zero_poi_right_m: Option<f64>Deliberate horizontal POI offset AT the zero range, meters (MBA-1359, Kestrel “zero
offset”): positive = impacts RIGHT by this much at zero_distance_m. Same contract
as zero_poi_up_m.
drops_reference: Option<DropsReferenceV1>Which plane sampled drop_m values are referenced to (MBA-1403). "los" (the
default when omitted) keeps the historical LOS-perpendicular drop byte-identically;
"target" reports drop as vertical in the target plane — the LOS-perpendicular
drop scaled by 1 / cos(shooting_angle_rad) (JBM’s “target plane” reference).
Output-mode toggle only: the solved trajectory, windage_m, the summary block and
zeroing semantics are unchanged. Echoed at ResolvedShotV1::drops_reference
when supplied (0.33.0 decision-support Task 1).
Trait Implementations§
Source§impl<'de> Deserialize<'de> for ShotV1
impl<'de> Deserialize<'de> for ShotV1
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl StructuralPartialEq for ShotV1
Auto Trait Implementations§
impl Freeze for ShotV1
impl RefUnwindSafe for ShotV1
impl Send for ShotV1
impl Sync for ShotV1
impl Unpin for ShotV1
impl UnsafeUnpin for ShotV1
impl UnwindSafe for ShotV1
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,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
impl<T> Scalar for T
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.