pub struct BurnSequenceEvaluator<'a> {
i: IndexedOrbitPosition,
vel: Vec2D<I32F32>,
targets: &'a [(Vec2D<I32F32>, Vec2D<I32F32>)],
max_dt: usize,
min_dt: usize,
max_off_orbit_dt: usize,
max_angle_dev: I32F32,
turns: (Vec<(Vec2D<I32F32>, Vec2D<I32F32>)>, Vec<(Vec2D<I32F32>, Vec2D<I32F32>)>),
best_burn: Option<ExitBurnResult>,
fuel_left: I32F32,
dynamic_fuel_w: I32F32,
target_id: usize,
}Expand description
A struct responsible for evaluating potential burn sequences for an orbit.
BurnSequenceEvaluator processes orbital positions, velocities, and
target data to determine optimal burn sequences based on constraints such
as time, fuel, and battery consumption.
Fields§
§i: IndexedOrbitPositionThe current indexed orbital position.
vel: Vec2D<I32F32>The current velocity vector in 2D space.
targets: &'a [(Vec2D<I32F32>, Vec2D<I32F32>)]A slice of target positions and their secondary offsets.
max_dt: usizeThe maximum allowable delta time for a burn sequence.
min_dt: usizeThe minimum allowable delta time for a burn sequence.
max_off_orbit_dt: usizeThe maximum allowable time spent off-orbit during a sequence.
max_angle_dev: I32F32The maximum angular deviation for the burn sequence.
turns: (Vec<(Vec2D<I32F32>, Vec2D<I32F32>)>, Vec<(Vec2D<I32F32>, Vec2D<I32F32>)>)Precomputed tuples of clockwise and counterclockwise turns for the sequence.
best_burn: Option<ExitBurnResult>The current best computed burn result, if one exists.
fuel_left: I32F32The available fuel for the evaluator to use.
dynamic_fuel_w: I32F32The dynamic weight assigned to fuel usage during scoring.
target_id: usizeThe identifier for the current target being evaluated.
Implementations§
Source§impl<'a> BurnSequenceEvaluator<'a>
impl<'a> BurnSequenceEvaluator<'a>
Sourceconst NINETY_DEG: I32F32
const NINETY_DEG: I32F32
A constant representing a 90-degree angle, in fixed-point format.
Sourceconst OFF_ORBIT_W: I32F32
const OFF_ORBIT_W: I32F32
Weight assigned to off-orbit delta time in optimization calculations.
Sourceconst MAX_FUEL_W: I32F32
const MAX_FUEL_W: I32F32
Maximum Weight assigned to fuel consumption in optimization calculations.
Sourceconst MIN_FUEL_W: I32F32
const MIN_FUEL_W: I32F32
Minimum Weight assigned to fuel consumption in optimization calculations.
Sourceconst ANGLE_DEV_W: I32F32
const ANGLE_DEV_W: I32F32
Weight assigned to angle deviation in optimization calculations.
Sourceconst ADD_ANGLE_DEV_W: I32F32
const ADD_ANGLE_DEV_W: I32F32
Weight assigned to additional target angle deviation.
Sourcepub fn new(
i: IndexedOrbitPosition,
vel: Vec2D<I32F32>,
targets: &'a [(Vec2D<I32F32>, Vec2D<I32F32>)],
min_dt: usize,
max_dt: usize,
max_off_orbit_dt: usize,
turns: (Vec<(Vec2D<I32F32>, Vec2D<I32F32>)>, Vec<(Vec2D<I32F32>, Vec2D<I32F32>)>),
fuel_left: I32F32,
target_id: usize,
) -> Self
pub fn new( i: IndexedOrbitPosition, vel: Vec2D<I32F32>, targets: &'a [(Vec2D<I32F32>, Vec2D<I32F32>)], min_dt: usize, max_dt: usize, max_off_orbit_dt: usize, turns: (Vec<(Vec2D<I32F32>, Vec2D<I32F32>)>, Vec<(Vec2D<I32F32>, Vec2D<I32F32>)>), fuel_left: I32F32, target_id: usize, ) -> Self
Constructs a new BurnSequenceEvaluator object
Sourcepub fn process_dt(&mut self, dt: usize, max_needed_batt: I32F32)
pub fn process_dt(&mut self, dt: usize, max_needed_batt: I32F32)
Evaluates whether a burn sequence at a specific dt is viable and better than existing sequences.
§Arguments
dt: Time offset in seconds from current position.max_needed_batt: Upper bound for acceptable battery consumption.
§Behavior
Builds and scores a candidate burn. Updates best_burn if it’s better
and satisfies fuel/charge constraints.
Sourcepub fn get_unwrapped_target(
b: &BurnSequence,
tar: &Vec2D<I32F32>,
) -> Vec2D<I32F32>
pub fn get_unwrapped_target( b: &BurnSequence, tar: &Vec2D<I32F32>, ) -> Vec2D<I32F32>
Returns the unwrapped target position
Sourcepub fn get_best_burn(self) -> Option<ExitBurnResult>
pub fn get_best_burn(self) -> Option<ExitBurnResult>
Returns the (heuristically) optimal ExitBurnResult if present
Sourcefn build_burn_sequence(
&self,
burn_i: IndexedOrbitPosition,
turns_in_dir: &[(Vec2D<I32F32>, Vec2D<I32F32>)],
break_cond: bool,
best_target: &(Vec2D<I32F32>, Vec2D<I32F32>),
) -> Option<BurnSequence>
fn build_burn_sequence( &self, burn_i: IndexedOrbitPosition, turns_in_dir: &[(Vec2D<I32F32>, Vec2D<I32F32>)], break_cond: bool, best_target: &(Vec2D<I32F32>, Vec2D<I32F32>), ) -> Option<BurnSequence>
Attempts to build a complete burn sequence using directional turns and evaluating if the final orientation and arrival meet objective constraints.
§Arguments
burn_i: Starting orbit index for this sequence.turns_in_dir: Precomputed valid turn maneuvers in chosen direction.break_cond: Whether to break based on clockwise/anticlockwise matching.best_target: Target location and secondary offset.
§Returns
A viable BurnSequence if one exists, otherwise None.
Sourcefn get_add_target_cost(
bs: &BurnSequence,
target: &(Vec2D<I32F32>, Vec2D<I32F32>),
) -> I32F32
fn get_add_target_cost( bs: &BurnSequence, target: &(Vec2D<I32F32>, Vec2D<I32F32>), ) -> I32F32
Sourcefn get_bs_cost(&self, bs: &BurnSequence) -> I32F32
fn get_bs_cost(&self, bs: &BurnSequence) -> I32F32
Auto Trait Implementations§
impl<'a> Freeze for BurnSequenceEvaluator<'a>
impl<'a> RefUnwindSafe for BurnSequenceEvaluator<'a>
impl<'a> Send for BurnSequenceEvaluator<'a>
impl<'a> Sync for BurnSequenceEvaluator<'a>
impl<'a> Unpin for BurnSequenceEvaluator<'a>
impl<'a> UnwindSafe for BurnSequenceEvaluator<'a>
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> CheckedAs for T
impl<T> CheckedAs for T
Source§fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
Source§impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
Source§fn checked_cast_from(src: Src) -> Option<Dst>
fn checked_cast_from(src: Src) -> Option<Dst>
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<Src, Dst> LosslessTryInto<Dst> for Srcwhere
Dst: LosslessTryFrom<Src>,
impl<Src, Dst> LosslessTryInto<Dst> for Srcwhere
Dst: LosslessTryFrom<Src>,
Source§fn lossless_try_into(self) -> Option<Dst>
fn lossless_try_into(self) -> Option<Dst>
Source§impl<Src, Dst> LossyInto<Dst> for Srcwhere
Dst: LossyFrom<Src>,
impl<Src, Dst> LossyInto<Dst> for Srcwhere
Dst: LossyFrom<Src>,
Source§fn lossy_into(self) -> Dst
fn lossy_into(self) -> Dst
Source§impl<T> OverflowingAs for T
impl<T> OverflowingAs for T
Source§fn overflowing_as<Dst>(self) -> (Dst, bool)where
T: OverflowingCast<Dst>,
fn overflowing_as<Dst>(self) -> (Dst, bool)where
T: OverflowingCast<Dst>,
Source§impl<Src, Dst> OverflowingCastFrom<Src> for Dstwhere
Src: OverflowingCast<Dst>,
impl<Src, Dst> OverflowingCastFrom<Src> for Dstwhere
Src: OverflowingCast<Dst>,
Source§fn overflowing_cast_from(src: Src) -> (Dst, bool)
fn overflowing_cast_from(src: Src) -> (Dst, bool)
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> SaturatingAs for T
impl<T> SaturatingAs for T
Source§fn saturating_as<Dst>(self) -> Dstwhere
T: SaturatingCast<Dst>,
fn saturating_as<Dst>(self) -> Dstwhere
T: SaturatingCast<Dst>,
Source§impl<Src, Dst> SaturatingCastFrom<Src> for Dstwhere
Src: SaturatingCast<Dst>,
impl<Src, Dst> SaturatingCastFrom<Src> for Dstwhere
Src: SaturatingCast<Dst>,
Source§fn saturating_cast_from(src: Src) -> Dst
fn saturating_cast_from(src: Src) -> Dst
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.