clifford 0.3.0

Geometric Algebra (Clifford Algebra) for Rust: rotors, motors, PGA for 3D rotations and rigid transforms
Documentation
#![doc = " Multivector conversions for dualquat."]
#![doc = ""]
#![doc = " This file is auto-generated by clifford-codegen."]
#![doc = " Do not edit manually."]
use super::types::{Bivector, DualQuaternion, Scalar, Trivector, Vector};
use crate::algebra::Multivector;
use crate::basis::Blade;
use crate::scalar::Float;
use crate::signature::Cl0_2_1;
impl<T: Float> From<Bivector<T>> for Multivector<T, Cl0_2_1> {
    fn from(value: Bivector<T>) -> Self {
        Self::from_coeffs(&[
            T::zero(),
            T::zero(),
            T::zero(),
            value.k(),
            T::zero(),
            value.di(),
            value.dj(),
            T::zero(),
        ])
    }
}
impl<T: Float> From<DualQuaternion<T>> for Multivector<T, Cl0_2_1> {
    fn from(value: DualQuaternion<T>) -> Self {
        Self::from_coeffs(&[
            value.s(),
            value.i(),
            value.j(),
            value.k(),
            value.d(),
            value.di(),
            value.dj(),
            value.dk(),
        ])
    }
}
impl<T: Float> From<Scalar<T>> for Multivector<T, Cl0_2_1> {
    fn from(value: Scalar<T>) -> Self {
        Self::from_coeffs(&[
            value.s(),
            T::zero(),
            T::zero(),
            T::zero(),
            T::zero(),
            T::zero(),
            T::zero(),
            T::zero(),
        ])
    }
}
impl<T: Float> From<Trivector<T>> for Multivector<T, Cl0_2_1> {
    fn from(value: Trivector<T>) -> Self {
        Self::from_coeffs(&[
            T::zero(),
            T::zero(),
            T::zero(),
            T::zero(),
            T::zero(),
            T::zero(),
            T::zero(),
            value.dk(),
        ])
    }
}
impl<T: Float> From<Vector<T>> for Multivector<T, Cl0_2_1> {
    fn from(value: Vector<T>) -> Self {
        Self::from_coeffs(&[
            T::zero(),
            value.i(),
            value.j(),
            T::zero(),
            value.d(),
            T::zero(),
            T::zero(),
            T::zero(),
        ])
    }
}
impl<T: Float> From<Multivector<T, Cl0_2_1>> for Bivector<T> {
    #[doc = r" Extracts this type from a multivector."]
    #[doc = r""]
    #[doc = r" Note: This is a lossy projection that only extracts the relevant"]
    #[doc = r" grades. Other components of the multivector are discarded."]
    fn from(mv: Multivector<T, Cl0_2_1>) -> Self {
        Self::new_unchecked(
            mv.get(Blade::from_index(3usize)),
            mv.get(Blade::from_index(5usize)),
            mv.get(Blade::from_index(6usize)),
        )
    }
}
impl<T: Float> From<Multivector<T, Cl0_2_1>> for DualQuaternion<T> {
    #[doc = r" Extracts this type from a multivector."]
    #[doc = r""]
    #[doc = r" Note: This is a lossy projection that only extracts the relevant"]
    #[doc = r" grades. Other components of the multivector are discarded."]
    fn from(mv: Multivector<T, Cl0_2_1>) -> Self {
        Self::new_unchecked(
            mv.get(Blade::from_index(0usize)),
            mv.get(Blade::from_index(1usize)),
            mv.get(Blade::from_index(2usize)),
            mv.get(Blade::from_index(4usize)),
            mv.get(Blade::from_index(3usize)),
            mv.get(Blade::from_index(5usize)),
            mv.get(Blade::from_index(6usize)),
            mv.get(Blade::from_index(7usize)),
        )
    }
}
impl<T: Float> From<Multivector<T, Cl0_2_1>> for Scalar<T> {
    #[doc = r" Extracts this type from a multivector."]
    #[doc = r""]
    #[doc = r" Note: This is a lossy projection that only extracts the relevant"]
    #[doc = r" grades. Other components of the multivector are discarded."]
    fn from(mv: Multivector<T, Cl0_2_1>) -> Self {
        Self::new_unchecked(mv.get(Blade::from_index(0usize)))
    }
}
impl<T: Float> From<Multivector<T, Cl0_2_1>> for Trivector<T> {
    #[doc = r" Extracts this type from a multivector."]
    #[doc = r""]
    #[doc = r" Note: This is a lossy projection that only extracts the relevant"]
    #[doc = r" grades. Other components of the multivector are discarded."]
    fn from(mv: Multivector<T, Cl0_2_1>) -> Self {
        Self::new_unchecked(mv.get(Blade::from_index(7usize)))
    }
}
impl<T: Float> From<Multivector<T, Cl0_2_1>> for Vector<T> {
    #[doc = r" Extracts this type from a multivector."]
    #[doc = r""]
    #[doc = r" Note: This is a lossy projection that only extracts the relevant"]
    #[doc = r" grades. Other components of the multivector are discarded."]
    fn from(mv: Multivector<T, Cl0_2_1>) -> Self {
        Self::new_unchecked(
            mv.get(Blade::from_index(1usize)),
            mv.get(Blade::from_index(2usize)),
            mv.get(Blade::from_index(4usize)),
        )
    }
}