Skip to main content

MassShift

Struct MassShift 

Source
#[non_exhaustive]
pub struct MassShift { pub trigger: Trigger, pub component: String, pub travel_m: f64, pub duration_s: f64, }
Expand description

A part carried inside the airframe moving along its axis: travel_m aft (forward when negative) over duration_s, starting on trigger.

The part is an internal component named by its id, and it moves with everything inside it. It can’t be a body component or an external one, one copy of a cluster’s, or hold a motor (the motor would stay where it is). Its mass can’t be under an override: not its stage’s, and not one on a component around it that covers what that component holds, since the override doesn’t say how much of the mass is the part’s. Shifts of one part add; a part can’t move inside another part that moves. Every shift of a part, forward ones together and aft ones together, must keep it inside the component that holds it, or no further out than the design already puts it.

The position along the travel is the cycloid s(τ) = τ − sin(2πτ)/2π of the fraction of the time gone, τ = (t − t₀)/T: at rest at both ends, fastest at the middle at 2 travel/T.

A shift can’t start before the rocket leaves the rail: the rail has no stop at its foot, so a part thrown aft on the pad could push the rocket up the rail and leave it there.

use hpr_sim::{MassShift, Trigger};

// The part with id "ballast" slides 0.3 m toward the tail over 1 s, starting 5 s after launch.
let shift = MassShift::new(Trigger::Time { time_s: 5.0 }, "ballast", 0.3, 1.0);
assert_eq!(shift.travel_m, 0.3);

Give it to a flight with crate::Simulation::with_shifts.

Fields (Non-exhaustive)§

This struct is marked as non-exhaustive
Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.
§trigger: Trigger

When the part starts to move: the same triggers as a recovery device’s.

§component: String

The id of the internal component that moves.

§travel_m: f64

How far it moves along the axis, m: positive aft, toward the tail.

§duration_s: f64

How long it takes, s: at least MIN_SHIFT_DURATION_S.

Implementations§

Source§

impl MassShift

Source

pub fn new( trigger: Trigger, component: impl Into<String>, travel_m: f64, duration_s: f64, ) -> Self

Internal component component moving travel_m aft (forward when negative) over duration_s, starting on trigger.

Trait Implementations§

Source§

impl Clone for MassShift

Source§

fn clone(&self) -> MassShift

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for MassShift

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for MassShift

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for MassShift

Source§

fn eq(&self, other: &MassShift) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Serialize for MassShift

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl StructuralPartialEq for MassShift

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.