pub struct ProjectileV1 {
pub mass_kg: f64,
pub diameter_m: f64,
pub length_m: Option<f64>,
pub drag_model: DragModelV1,
pub ballistic_coefficient: f64,
pub drag_table: Option<DragTableV1>,
pub bc_segments: Option<Vec<BcSegmentV1>>,
}Expand description
Projectile inputs supported by solve-json v1.
Fields§
§mass_kg: f64§diameter_m: f64§length_m: Option<f64>§drag_model: DragModelV1§ballistic_coefficient: f64§drag_table: Option<DragTableV1>A caller-supplied drag curve replacing drag_model’s (MBA-1597). See DragTableV1.
Beside bc_segments it must be a DragTableKindV1::Reference curve, which the band
BCs are then measured against.
bc_segments: Option<Vec<BcSegmentV1>>A velocity-banded BC ladder (MBA-1598): solve-json’s form of the CLI’s --bc-segment.
See BcSegmentV1 for the band rules.
ballistic_coefficient stays required and validated beside it, but flies only in an
interior gap between two bands, and blended into the bands within up to 25 fps either
side of a gap edge. Below the lowest band, or at or above the highest, the nearest edge
band applies, so under a gapless ladder the scalar never flies. A one-band ladder’s BC
must match ballistic_coefficient (see ONE_BAND_BC_RELATIVE_TOLERANCE_V1).
Band BCs are referenced to the same curve as the scalar: drag_model’s, or a
DragTableKindV1::Reference drag_table’s, which then flies the bands exactly as a
built-in model does. The engine cannot check which curve a published band BC was
measured against; the caller must send the matching one. Bands are selected by airspeed
(speed relative to the air mass), and interior band and gap edges are smoothstep-blended
(velocity_segment_bc in src/bc_estimation.rs). Refused (conflicting_fields)
alongside a DragTableKindV1::Projectile drag_table, whose curve is the projectile’s
own Cd with no BC for the bands to change, and alongside corrections.bc5d_table_path,
which builds its own ladder from ballistic_coefficient.
Trait Implementations§
Source§impl Clone for ProjectileV1
impl Clone for ProjectileV1
Source§impl Debug for ProjectileV1
impl Debug for ProjectileV1
Source§impl<'de> Deserialize<'de> for ProjectileV1
impl<'de> Deserialize<'de> for ProjectileV1
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>,
Source§impl PartialEq for ProjectileV1
impl PartialEq for ProjectileV1
Source§impl Serialize for ProjectileV1
impl Serialize for ProjectileV1
impl StructuralPartialEq for ProjectileV1
Auto Trait Implementations§
impl Freeze for ProjectileV1
impl RefUnwindSafe for ProjectileV1
impl Send for ProjectileV1
impl Sync for ProjectileV1
impl Unpin for ProjectileV1
impl UnsafeUnpin for ProjectileV1
impl UnwindSafe for ProjectileV1
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.