pub struct SymmetricMat6 {
pub a: SymmetricMat3,
pub b: Mat3,
pub d: SymmetricMat3,
}
Expand description
The bottom left triangle (including the diagonal) of a symmetric 6x6 column-major matrix.
This is useful for storing a symmetric 6x6 matrix in a more compact form and performing some matrix operations more efficiently.
Some defining properties of symmetric matrices include:
- The matrix is equal to its transpose.
- The matrix has real eigenvalues.
- The eigenvectors corresponding to the eigenvalues are orthogonal.
- The matrix is always diagonalizable.
The sum and difference of two symmetric matrices is always symmetric.
However, the product of two symmetric matrices is only symmetric
if the matrices are commutable, meaning that AB = BA
.
The 6x6 matrix is represented as:
[ A BT ]
[ B D ]
Fields§
§a: SymmetricMat3
The bottom left triangle of the top left 3x3 block of the matrix, including the diagonal.
b: Mat3
The bottom left 3x3 block of the matrix.
d: SymmetricMat3
The bottom left triangle of the bottom right 3x3 block of the matrix, including the diagonal.
Implementations§
Source§impl SymmetricMat6
impl SymmetricMat6
Sourcepub const IDENTITY: Self
pub const IDENTITY: Self
A symmetric 6x6 identity matrix, where all diagonal elements are 1.0
,
and all off-diagonal elements are 0.0
.
Sourcepub const fn new(a: SymmetricMat3, b: Mat3, d: SymmetricMat3) -> Self
pub const fn new(a: SymmetricMat3, b: Mat3, d: SymmetricMat3) -> Self
Creates a new symmetric 6x6 matrix from its bottom left triangle, including diagonal elements.
The matrix is represented as:
[ A BT ]
[ B D ]
Sourcepub fn from_outer_product(v1: Vec3, v2: Vec3) -> Self
pub fn from_outer_product(v1: Vec3, v2: Vec3) -> Self
Creates a new symmetric 6x6 matrix from the outer product [v1, v2] * [v1, v2]^T
.
Sourcepub fn is_finite(&self) -> bool
pub fn is_finite(&self) -> bool
Returns true
if, and only if, all elements are finite.
If any element is either NaN
or positive or negative infinity, this will return false
.
Sourcepub fn mul_vec6(&self, rhs1: Vec3, rhs2: Vec3) -> (Vec3, Vec3)
pub fn mul_vec6(&self, rhs1: Vec3, rhs2: Vec3) -> (Vec3, Vec3)
Transforms a 6x1 vector that is split into two 3x1 vectors.
Sourcepub fn ldlt_solve(&self, rhs1: Vec3, rhs2: Vec3) -> (Vec3, Vec3)
pub fn ldlt_solve(&self, rhs1: Vec3, rhs2: Vec3) -> (Vec3, Vec3)
Solves self * [x1, x2] = [rhs1, rhs2]
for x1
and x2
using the LDLT decomposition.
self
must be a positive semidefinite matrix.
Sourcepub fn add_symmetric_mat6(&self, rhs: &Self) -> Self
pub fn add_symmetric_mat6(&self, rhs: &Self) -> Self
Adds two symmetric 6x6 matrices.
Sourcepub fn sub_symmetric_mat6(&self, rhs: &Self) -> Self
pub fn sub_symmetric_mat6(&self, rhs: &Self) -> Self
Subtracts two symmetric 6x6 matrices.
Sourcepub fn mul_scalar(&self, rhs: f32) -> Self
pub fn mul_scalar(&self, rhs: f32) -> Self
Multiplies a 6x6 matrix by a scalar.
Sourcepub fn div_scalar(&self, rhs: f32) -> Self
pub fn div_scalar(&self, rhs: f32) -> Self
Divides a 6x6 matrix by a scalar.
Source§impl SymmetricMat6
impl SymmetricMat6
Sourcepub fn as_symmetric_dmat6(&self) -> SymmetricDMat6
pub fn as_symmetric_dmat6(&self) -> SymmetricDMat6
Returns the double precision version of self
.
Trait Implementations§
Source§impl Add<&&SymmetricMat6> for &SymmetricMat6
impl Add<&&SymmetricMat6> for &SymmetricMat6
Source§impl Add<&SymmetricMat6> for SymmetricMat6
impl Add<&SymmetricMat6> for SymmetricMat6
Source§impl Add for &SymmetricMat6
impl Add for &SymmetricMat6
Source§impl Add for SymmetricMat6
impl Add for SymmetricMat6
Source§impl AddAssign<&SymmetricMat6> for SymmetricMat6
impl AddAssign<&SymmetricMat6> for SymmetricMat6
Source§fn add_assign(&mut self, rhs: &Self)
fn add_assign(&mut self, rhs: &Self)
+=
operation. Read moreSource§impl AddAssign for SymmetricMat6
impl AddAssign for SymmetricMat6
Source§fn add_assign(&mut self, rhs: Self)
fn add_assign(&mut self, rhs: Self)
+=
operation. Read moreSource§impl Clone for SymmetricMat6
impl Clone for SymmetricMat6
Source§fn clone(&self) -> SymmetricMat6
fn clone(&self) -> SymmetricMat6
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for SymmetricMat6
impl Debug for SymmetricMat6
Source§impl Default for SymmetricMat6
impl Default for SymmetricMat6
Source§impl Display for SymmetricMat6
impl Display for SymmetricMat6
Source§impl Div<&SymmetricMat6> for &f32
impl Div<&SymmetricMat6> for &f32
Source§type Output = SymmetricMat6
type Output = SymmetricMat6
/
operator.Source§impl Div<&SymmetricMat6> for f32
impl Div<&SymmetricMat6> for f32
Source§type Output = SymmetricMat6
type Output = SymmetricMat6
/
operator.Source§impl Div<&f32> for &SymmetricMat6
impl Div<&f32> for &SymmetricMat6
Source§impl Div<&f32> for SymmetricMat6
impl Div<&f32> for SymmetricMat6
Source§impl Div<SymmetricMat6> for &f32
impl Div<SymmetricMat6> for &f32
Source§type Output = SymmetricMat6
type Output = SymmetricMat6
/
operator.Source§impl Div<SymmetricMat6> for f32
impl Div<SymmetricMat6> for f32
Source§type Output = SymmetricMat6
type Output = SymmetricMat6
/
operator.Source§impl Div<f32> for &SymmetricMat6
impl Div<f32> for &SymmetricMat6
Source§impl Div<f32> for SymmetricMat6
impl Div<f32> for SymmetricMat6
Source§impl DivAssign<&f32> for SymmetricMat6
impl DivAssign<&f32> for SymmetricMat6
Source§fn div_assign(&mut self, rhs: &f32)
fn div_assign(&mut self, rhs: &f32)
/=
operation. Read moreSource§impl DivAssign<f32> for SymmetricMat6
impl DivAssign<f32> for SymmetricMat6
Source§fn div_assign(&mut self, rhs: f32)
fn div_assign(&mut self, rhs: f32)
/=
operation. Read moreSource§impl FromReflect for SymmetricMat6
impl FromReflect for SymmetricMat6
Source§fn from_reflect(reflect: &dyn PartialReflect) -> Option<Self>
fn from_reflect(reflect: &dyn PartialReflect) -> Option<Self>
Self
from a reflected value.Source§fn take_from_reflect(
reflect: Box<dyn PartialReflect>,
) -> Result<Self, Box<dyn PartialReflect>>
fn take_from_reflect( reflect: Box<dyn PartialReflect>, ) -> Result<Self, Box<dyn PartialReflect>>
Self
using,
constructing the value using from_reflect
if that fails. Read moreSource§impl GetTypeRegistration for SymmetricMat6
impl GetTypeRegistration for SymmetricMat6
Source§fn get_type_registration() -> TypeRegistration
fn get_type_registration() -> TypeRegistration
TypeRegistration
for this type.Source§fn register_type_dependencies(registry: &mut TypeRegistry)
fn register_type_dependencies(registry: &mut TypeRegistry)
Source§impl Mul<&SymmetricMat6> for &f32
impl Mul<&SymmetricMat6> for &f32
Source§type Output = SymmetricMat6
type Output = SymmetricMat6
*
operator.Source§impl Mul<&SymmetricMat6> for f32
impl Mul<&SymmetricMat6> for f32
Source§type Output = SymmetricMat6
type Output = SymmetricMat6
*
operator.Source§impl Mul<&f32> for &SymmetricMat6
impl Mul<&f32> for &SymmetricMat6
Source§impl Mul<&f32> for SymmetricMat6
impl Mul<&f32> for SymmetricMat6
Source§impl Mul<SymmetricMat6> for &f32
impl Mul<SymmetricMat6> for &f32
Source§type Output = SymmetricMat6
type Output = SymmetricMat6
*
operator.Source§impl Mul<SymmetricMat6> for f32
impl Mul<SymmetricMat6> for f32
Source§type Output = SymmetricMat6
type Output = SymmetricMat6
*
operator.Source§impl Mul<f32> for &SymmetricMat6
impl Mul<f32> for &SymmetricMat6
Source§impl Mul<f32> for SymmetricMat6
impl Mul<f32> for SymmetricMat6
Source§impl MulAssign<&f32> for SymmetricMat6
impl MulAssign<&f32> for SymmetricMat6
Source§fn mul_assign(&mut self, rhs: &f32)
fn mul_assign(&mut self, rhs: &f32)
*=
operation. Read moreSource§impl MulAssign<f32> for SymmetricMat6
impl MulAssign<f32> for SymmetricMat6
Source§fn mul_assign(&mut self, rhs: f32)
fn mul_assign(&mut self, rhs: f32)
*=
operation. Read moreSource§impl Neg for &SymmetricMat6
impl Neg for &SymmetricMat6
Source§impl Neg for SymmetricMat6
impl Neg for SymmetricMat6
Source§impl PartialEq for SymmetricMat6
impl PartialEq for SymmetricMat6
Source§impl PartialReflect for SymmetricMat6
impl PartialReflect for SymmetricMat6
Source§fn get_represented_type_info(&self) -> Option<&'static TypeInfo>
fn get_represented_type_info(&self) -> Option<&'static TypeInfo>
Source§fn try_apply(&mut self, value: &dyn PartialReflect) -> Result<(), ApplyError>
fn try_apply(&mut self, value: &dyn PartialReflect) -> Result<(), ApplyError>
Source§fn reflect_kind(&self) -> ReflectKind
fn reflect_kind(&self) -> ReflectKind
Source§fn reflect_ref(&self) -> ReflectRef<'_>
fn reflect_ref(&self) -> ReflectRef<'_>
Source§fn reflect_mut(&mut self) -> ReflectMut<'_>
fn reflect_mut(&mut self) -> ReflectMut<'_>
Source§fn reflect_owned(self: Box<Self>) -> ReflectOwned
fn reflect_owned(self: Box<Self>) -> ReflectOwned
Source§fn try_into_reflect(
self: Box<Self>,
) -> Result<Box<dyn Reflect>, Box<dyn PartialReflect>>
fn try_into_reflect( self: Box<Self>, ) -> Result<Box<dyn Reflect>, Box<dyn PartialReflect>>
Source§fn try_as_reflect(&self) -> Option<&dyn Reflect>
fn try_as_reflect(&self) -> Option<&dyn Reflect>
Source§fn try_as_reflect_mut(&mut self) -> Option<&mut dyn Reflect>
fn try_as_reflect_mut(&mut self) -> Option<&mut dyn Reflect>
Source§fn into_partial_reflect(self: Box<Self>) -> Box<dyn PartialReflect>
fn into_partial_reflect(self: Box<Self>) -> Box<dyn PartialReflect>
Source§fn as_partial_reflect(&self) -> &dyn PartialReflect
fn as_partial_reflect(&self) -> &dyn PartialReflect
Source§fn as_partial_reflect_mut(&mut self) -> &mut dyn PartialReflect
fn as_partial_reflect_mut(&mut self) -> &mut dyn PartialReflect
Source§fn reflect_partial_eq(&self, value: &dyn PartialReflect) -> Option<bool>
fn reflect_partial_eq(&self, value: &dyn PartialReflect) -> Option<bool>
Source§fn reflect_clone(&self) -> Result<Box<dyn Reflect>, ReflectCloneError>
fn reflect_clone(&self) -> Result<Box<dyn Reflect>, ReflectCloneError>
Self
using reflection. Read moreSource§fn apply(&mut self, value: &(dyn PartialReflect + 'static))
fn apply(&mut self, value: &(dyn PartialReflect + 'static))
Source§fn to_dynamic(&self) -> Box<dyn PartialReflect>
fn to_dynamic(&self) -> Box<dyn PartialReflect>
Source§fn reflect_clone_and_take<T>(&self) -> Result<T, ReflectCloneError>
fn reflect_clone_and_take<T>(&self) -> Result<T, ReflectCloneError>
PartialReflect
, combines reflect_clone
and
take
in a useful fashion, automatically constructing an appropriate
ReflectCloneError
if the downcast fails. Read moreSource§fn reflect_hash(&self) -> Option<u64>
fn reflect_hash(&self) -> Option<u64>
Source§fn debug(&self, f: &mut Formatter<'_>) -> Result<(), Error>
fn debug(&self, f: &mut Formatter<'_>) -> Result<(), Error>
Source§fn is_dynamic(&self) -> bool
fn is_dynamic(&self) -> bool
Source§impl Reflect for SymmetricMat6
impl Reflect for SymmetricMat6
Source§fn as_any_mut(&mut self) -> &mut dyn Any
fn as_any_mut(&mut self) -> &mut dyn Any
&mut dyn Any
. Read moreSource§fn into_reflect(self: Box<Self>) -> Box<dyn Reflect>
fn into_reflect(self: Box<Self>) -> Box<dyn Reflect>
Source§fn as_reflect(&self) -> &dyn Reflect
fn as_reflect(&self) -> &dyn Reflect
Source§fn as_reflect_mut(&mut self) -> &mut dyn Reflect
fn as_reflect_mut(&mut self) -> &mut dyn Reflect
Source§impl Struct for SymmetricMat6
impl Struct for SymmetricMat6
Source§fn field(&self, name: &str) -> Option<&dyn PartialReflect>
fn field(&self, name: &str) -> Option<&dyn PartialReflect>
name
as a &dyn PartialReflect
.Source§fn field_mut(&mut self, name: &str) -> Option<&mut dyn PartialReflect>
fn field_mut(&mut self, name: &str) -> Option<&mut dyn PartialReflect>
name
as a
&mut dyn PartialReflect
.Source§fn field_at(&self, index: usize) -> Option<&dyn PartialReflect>
fn field_at(&self, index: usize) -> Option<&dyn PartialReflect>
index
as a
&dyn PartialReflect
.Source§fn field_at_mut(&mut self, index: usize) -> Option<&mut dyn PartialReflect>
fn field_at_mut(&mut self, index: usize) -> Option<&mut dyn PartialReflect>
index
as a &mut dyn PartialReflect
.Source§fn name_at(&self, index: usize) -> Option<&str>
fn name_at(&self, index: usize) -> Option<&str>
index
.Source§fn iter_fields(&self) -> FieldIter<'_>
fn iter_fields(&self) -> FieldIter<'_>
Source§fn to_dynamic_struct(&self) -> DynamicStruct
fn to_dynamic_struct(&self) -> DynamicStruct
DynamicStruct
from this struct.Source§fn get_represented_struct_info(&self) -> Option<&'static StructInfo>
fn get_represented_struct_info(&self) -> Option<&'static StructInfo>
None
if TypeInfo
is not available.Source§impl Sub<&&SymmetricMat6> for &SymmetricMat6
impl Sub<&&SymmetricMat6> for &SymmetricMat6
Source§impl Sub<&SymmetricMat6> for SymmetricMat6
impl Sub<&SymmetricMat6> for SymmetricMat6
Source§impl Sub for &SymmetricMat6
impl Sub for &SymmetricMat6
Source§impl Sub for SymmetricMat6
impl Sub for SymmetricMat6
Source§impl SubAssign<&SymmetricMat6> for SymmetricMat6
impl SubAssign<&SymmetricMat6> for SymmetricMat6
Source§fn sub_assign(&mut self, rhs: &Self)
fn sub_assign(&mut self, rhs: &Self)
-=
operation. Read moreSource§impl SubAssign for SymmetricMat6
impl SubAssign for SymmetricMat6
Source§fn sub_assign(&mut self, rhs: Self)
fn sub_assign(&mut self, rhs: Self)
-=
operation. Read moreSource§impl<'a> Sum<&'a SymmetricMat6> for SymmetricMat6
impl<'a> Sum<&'a SymmetricMat6> for SymmetricMat6
Source§fn sum<I: Iterator<Item = &'a SymmetricMat6>>(iter: I) -> Self
fn sum<I: Iterator<Item = &'a SymmetricMat6>>(iter: I) -> Self
Self
from the elements by “summing up”
the items.Source§impl Sum for SymmetricMat6
impl Sum for SymmetricMat6
Source§fn sum<I: Iterator<Item = SymmetricMat6>>(iter: I) -> Self
fn sum<I: Iterator<Item = SymmetricMat6>>(iter: I) -> Self
Self
from the elements by “summing up”
the items.Source§impl TypePath for SymmetricMat6
impl TypePath for SymmetricMat6
Source§fn type_path() -> &'static str
fn type_path() -> &'static str
Source§fn short_type_path() -> &'static str
fn short_type_path() -> &'static str
Source§fn type_ident() -> Option<&'static str>
fn type_ident() -> Option<&'static str>
Source§fn crate_name() -> Option<&'static str>
fn crate_name() -> Option<&'static str>
Source§impl Typed for SymmetricMat6
impl Typed for SymmetricMat6
impl Copy for SymmetricMat6
impl StructuralPartialEq for SymmetricMat6
Auto Trait Implementations§
impl Freeze for SymmetricMat6
impl RefUnwindSafe for SymmetricMat6
impl Send for SymmetricMat6
impl Sync for SymmetricMat6
impl Unpin for SymmetricMat6
impl UnwindSafe for SymmetricMat6
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,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
, which can then be
downcast
into Box<dyn ConcreteType>
where ConcreteType
implements Trait
.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
, which can then be further
downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> DynamicTypePath for Twhere
T: TypePath,
impl<T> DynamicTypePath for Twhere
T: TypePath,
Source§fn reflect_type_path(&self) -> &str
fn reflect_type_path(&self) -> &str
TypePath::type_path
.Source§fn reflect_short_type_path(&self) -> &str
fn reflect_short_type_path(&self) -> &str
Source§fn reflect_type_ident(&self) -> Option<&str>
fn reflect_type_ident(&self) -> Option<&str>
TypePath::type_ident
.Source§fn reflect_crate_name(&self) -> Option<&str>
fn reflect_crate_name(&self) -> Option<&str>
TypePath::crate_name
.Source§fn reflect_module_path(&self) -> Option<&str>
fn reflect_module_path(&self) -> Option<&str>
Source§impl<T> DynamicTyped for Twhere
T: Typed,
impl<T> DynamicTyped for Twhere
T: Typed,
Source§fn reflect_type_info(&self) -> &'static TypeInfo
fn reflect_type_info(&self) -> &'static TypeInfo
Typed::type_info
.Source§impl<S> GetField for Swhere
S: Struct,
impl<S> GetField for Swhere
S: Struct,
Source§impl<T> GetPath for T
impl<T> GetPath for T
Source§fn reflect_path<'p>(
&self,
path: impl ReflectPath<'p>,
) -> Result<&(dyn PartialReflect + 'static), ReflectPathError<'p>>
fn reflect_path<'p>( &self, path: impl ReflectPath<'p>, ) -> Result<&(dyn PartialReflect + 'static), ReflectPathError<'p>>
path
. Read moreSource§fn reflect_path_mut<'p>(
&mut self,
path: impl ReflectPath<'p>,
) -> Result<&mut (dyn PartialReflect + 'static), ReflectPathError<'p>>
fn reflect_path_mut<'p>( &mut self, path: impl ReflectPath<'p>, ) -> Result<&mut (dyn PartialReflect + 'static), ReflectPathError<'p>>
path
. Read moreSource§fn path<'p, T>(
&self,
path: impl ReflectPath<'p>,
) -> Result<&T, ReflectPathError<'p>>where
T: Reflect,
fn path<'p, T>(
&self,
path: impl ReflectPath<'p>,
) -> Result<&T, ReflectPathError<'p>>where
T: Reflect,
path
. Read moreSource§fn path_mut<'p, T>(
&mut self,
path: impl ReflectPath<'p>,
) -> Result<&mut T, ReflectPathError<'p>>where
T: Reflect,
fn path_mut<'p, T>(
&mut self,
path: impl ReflectPath<'p>,
) -> Result<&mut T, ReflectPathError<'p>>where
T: Reflect,
path
. Read more