pub struct RefFrameState {
pub trans: RefFrameTrans,
pub rot: RefFrameRot,
}Expand description
Combined translational + rotational state of a frame relative to its
parent. The untyped storage form used by crate::FrameTree.
Fields§
§trans: RefFrameTransTranslational state in parent coordinates.
rot: RefFrameRotRotational state (parent → this).
Implementations§
Source§impl RefFrameState
impl RefFrameState
Sourcepub fn negate(source: &RefFrameState) -> RefFrameState
pub fn negate(source: &RefFrameState) -> RefFrameState
Negate (invert) a frame state.
If source represents the state of frame B relative to frame A (A->B),
the result represents the state of frame A relative to frame B (B->A).
Ported from JEOD ref_frame_state.cc negate method.
Convention:
trans.position: position of “this” frame’s origin in parent frame coordstrans.velocity: velocity of “this” frame’s origin in parent frame coordsrot.t_parent_this: transforms vectors FROM parent TO this framerot.ang_vel_this: angular velocity of this frame relative to parent, in this frame coords
Sourcepub fn incr_right(&self, s_bc: &RefFrameState) -> RefFrameState
pub fn incr_right(&self, s_bc: &RefFrameState) -> RefFrameState
Compose self (A->B) with s_bc (B->C) to produce A->C.
“Increment right”: given self = S_{A:B} and s_bc = S_{B:C}, compute and return S_{A:C}.
Ported from JEOD ref_frame_state.cc incr_right / compose_state.
The identity-rotation fast-path mirrors the Numerical::compare_exact( rot.Q_parent_this.scalar, 1.0) shortcut at
models/utils/ref_frames/src/ref_frame_state.cc:267-302 (incr_left,
the function JEOD uses in compute_relative_state). When
self.rot.q_parent_this is bit-exactly identity, T_{A:B}^T = I and
Q_{A:B} is identity, so the quaternion-multiply + normalize +
matrix-rebuild round-trip would just reproduce s_bc’s rotation with
f64 round-off. Copying instead preserves bits and gives walks through
identity hops the hop-count invariance JEOD’s compute_relative_state
algorithm assumes (see issue #562 for the case where the absence of
this shortcut produced ~30 ULP body-position drift between the 1-hop
runner and 2-hop Bevy frame-tree shapes).
Velocity composition retains the omega_{A:B} × x_{B:C} term — this
matches JEOD’s incr_left identity branch (:293-295) and our own
non-fast-path. JEOD’s separate incr_right identity branch
(:376-381) drops that term, but is documented in JEOD as an untested
utility “not used in the Reference Frame Model at any point”
(:309-311); we don’t propagate that inconsistency.
Sourcepub fn incr_left(&mut self, s_ab: &RefFrameState)
pub fn incr_left(&mut self, s_ab: &RefFrameState)
Compose s_ab (A->B) with self (B->C) to produce A->C, updating self in place.
“Increment left”: given s_ab = S_{A:B} and self = S_{B:C}, update self to become S_{A:C}.
Same math as incr_right but with different roles.
Trait Implementations§
Source§impl Clone for RefFrameState
impl Clone for RefFrameState
Source§fn clone(&self) -> RefFrameState
fn clone(&self) -> RefFrameState
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Copy for RefFrameState
Source§impl Debug for RefFrameState
impl Debug for RefFrameState
Source§impl Default for RefFrameState
impl Default for RefFrameState
Source§fn default() -> RefFrameState
fn default() -> RefFrameState
Source§impl PartialEq for RefFrameState
impl PartialEq for RefFrameState
Source§fn eq(&self, other: &RefFrameState) -> bool
fn eq(&self, other: &RefFrameState) -> bool
self and other values to be equal, and is used by ==.impl StructuralPartialEq for RefFrameState
Auto Trait Implementations§
impl Freeze for RefFrameState
impl RefUnwindSafe for RefFrameState
impl Send for RefFrameState
impl Sync for RefFrameState
impl Unpin for RefFrameState
impl UnsafeUnpin for RefFrameState
impl UnwindSafe for RefFrameState
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> 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.