pub struct Bivector<const D: usize> { /* private fields */ }Expand description
A bivector in D-dimensional space (grade-2 element of the geometric algebra).
Bivectors represent oriented planes. In 3D they are dual to pseudovectors. In ND they properly represent rotations: a rotation happens IN a plane.
Stack-allocated: uses [f64; 6] fixed array (max for D=4).
Zero heap allocation — safe for physics hot loops at 60+ Hz.
Component ordering: lexicographic (i,j) with i < j. For D=4: [e01, e02, e03, e12, e13, e23].
Implementations§
Source§impl<const D: usize> Bivector<D>
impl<const D: usize> Bivector<D>
Sourcepub const fn num_components() -> usize
pub const fn num_components() -> usize
Number of independent components: D*(D-1)/2.
Sourcepub fn unit_plane(i: usize, j: usize) -> Self
pub fn unit_plane(i: usize, j: usize) -> Self
Unit bivector in the plane spanned by axes i and j (i < j).
Sourcepub fn set(&mut self, i: usize, j: usize, value: f64)
pub fn set(&mut self, i: usize, j: usize, value: f64)
Set the component for the (i, j) plane (i < j).
Sourcepub fn from_matrix(mat: &SMatrix<f64, D, D>) -> Self
pub fn from_matrix(mat: &SMatrix<f64, D, D>) -> Self
Construct from an antisymmetric matrix.
Sourcepub fn is_finite(&self) -> bool
pub fn is_finite(&self) -> bool
Returns true if all components are finite (not NaN or infinite).
Sourcepub fn norm_squared(&self) -> f64
pub fn norm_squared(&self) -> f64
Squared norm.
Sourcepub fn normalized(&self) -> Option<Self>
pub fn normalized(&self) -> Option<Self>
Normalize to unit bivector. Returns None if zero.
Trait Implementations§
impl<const D: usize> Copy for Bivector<D>
Auto Trait Implementations§
impl<const D: usize> Freeze for Bivector<D>
impl<const D: usize> RefUnwindSafe for Bivector<D>
impl<const D: usize> Send for Bivector<D>
impl<const D: usize> Sync for Bivector<D>
impl<const D: usize> Unpin for Bivector<D>
impl<const D: usize> UnsafeUnpin for Bivector<D>
impl<const D: usize> UnwindSafe for Bivector<D>
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<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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.