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>§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; there is no resolved-DTO echo
(request-side additive field — the response shape is unchanged).
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, and there is no resolved-DTO echo (request-side
additive field — the response shape is unchanged).
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.