#[repr(C)]pub struct FFITrajectoryPoint {
pub time: c_double,
pub position_x: c_double,
pub position_y: c_double,
pub position_z: c_double,
pub velocity_magnitude: c_double,
pub kinetic_energy: c_double,
}Expand description
One integrated trajectory point, in the launch frame.
Axis convention — read this before indexing the positions. All three are ABSOLUTE positions in METERS, measured from the muzzle (the bore exit is the origin):
| field | axis | sign |
|---|---|---|
position_x | DOWNRANGE, toward the target | increases with range; bracket on this to find a given distance |
position_y | VERTICAL height | + up, - down (below the muzzle) |
position_z | LATERAL windage | + right as seen by the shooter, - left |
Two traps this ordering sets for consumers:
- It is not the “Z is downrange, X is lateral” convention. Engine 0.13.x used that
opposite convention, and consumers and API layers written against those releases may
still document it, so code ported from one must swap X and Z. Nothing fails loudly if you
do not — all three fields stay valid
doubles, so a mix-up silently plots range as windage instead of erroring. Take the convention from this struct, not from a downstream document. position_yis a height, not a drop. It is positive UP and relative to the muzzle, whereasFFITrajectorySample::drop_metersis positive DOWN and relative to the line of sight. The two disagree in both origin and sign; they are not interchangeable.
Enforced in this file’s tests: zero_then_fly_with_same_deck_is_consistent brackets the
zero distance on position_x, and ffi_cant_angle_deflects_laterally asserts position_z
grows rightward under cant.
Fields§
§time: c_double§position_x: c_doubleDownrange distance from the muzzle, meters. See the struct docs.
position_y: c_doubleHeight above the muzzle, meters, positive up (NOT a drop). See the struct docs.
position_z: c_doubleLateral offset from the bore line, meters, positive right. See the struct docs.
velocity_magnitude: c_double§kinetic_energy: c_doubleAuto Trait Implementations§
impl Freeze for FFITrajectoryPoint
impl RefUnwindSafe for FFITrajectoryPoint
impl Send for FFITrajectoryPoint
impl Sync for FFITrajectoryPoint
impl Unpin for FFITrajectoryPoint
impl UnsafeUnpin for FFITrajectoryPoint
impl UnwindSafe for FFITrajectoryPoint
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
Mutably borrows from an owned value. Read more
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>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
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
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.