clifford 0.3.0

Geometric Algebra (Clifford Algebra) for Rust: rotors, motors, PGA for 3D rotations and rigid transforms
Documentation
#![doc = " Multivector conversions for projective3."]
#![doc = ""]
#![doc = " This file is auto-generated by clifford-codegen."]
#![doc = " Do not edit manually."]
use super::types::{Flector, Line, Motor, Plane, Point, Quadvector, Scalar};
use crate::algebra::Multivector;
use crate::basis::Blade;
use crate::scalar::Float;
use crate::signature::Projective3;
impl<T: Float> From<Flector<T>> for Multivector<T, Projective3> {
    fn from(value: Flector<T>) -> Self {
        Self::from_coeffs(&[
            T::zero(),
            value.px(),
            value.py(),
            T::zero(),
            value.pz(),
            T::zero(),
            T::zero(),
            value.dist(),
            value.pw(),
            T::zero(),
            T::zero(),
            value.nz(),
            T::zero(),
            value.ny(),
            value.nx(),
            T::zero(),
        ])
    }
}
impl<T: Float> From<Line<T>> for Multivector<T, Projective3> {
    fn from(value: Line<T>) -> Self {
        Self::from_coeffs(&[
            T::zero(),
            T::zero(),
            T::zero(),
            value.moment_z(),
            T::zero(),
            value.moment_y(),
            value.moment_x(),
            T::zero(),
            T::zero(),
            value.dir_x(),
            value.dir_y(),
            T::zero(),
            value.dir_z(),
            T::zero(),
            T::zero(),
            T::zero(),
        ])
    }
}
impl<T: Float> From<Motor<T>> for Multivector<T, Projective3> {
    fn from(value: Motor<T>) -> Self {
        Self::from_coeffs(&[
            value.s(),
            T::zero(),
            T::zero(),
            value.tz(),
            T::zero(),
            value.ty(),
            value.rx(),
            T::zero(),
            T::zero(),
            value.tx(),
            value.ry(),
            T::zero(),
            value.rz(),
            T::zero(),
            T::zero(),
            value.ps(),
        ])
    }
}
impl<T: Float> From<Plane<T>> for Multivector<T, Projective3> {
    fn from(value: Plane<T>) -> Self {
        Self::from_coeffs(&[
            T::zero(),
            T::zero(),
            T::zero(),
            T::zero(),
            T::zero(),
            T::zero(),
            T::zero(),
            value.dist(),
            T::zero(),
            T::zero(),
            T::zero(),
            value.nz(),
            T::zero(),
            value.ny(),
            value.nx(),
            T::zero(),
        ])
    }
}
impl<T: Float> From<Point<T>> for Multivector<T, Projective3> {
    fn from(value: Point<T>) -> Self {
        Self::from_coeffs(&[
            T::zero(),
            value.x(),
            value.y(),
            T::zero(),
            value.z(),
            T::zero(),
            T::zero(),
            T::zero(),
            value.w(),
            T::zero(),
            T::zero(),
            T::zero(),
            T::zero(),
            T::zero(),
            T::zero(),
            T::zero(),
        ])
    }
}
impl<T: Float> From<Quadvector<T>> for Multivector<T, Projective3> {
    fn from(value: Quadvector<T>) -> Self {
        Self::from_coeffs(&[
            T::zero(),
            T::zero(),
            T::zero(),
            T::zero(),
            T::zero(),
            T::zero(),
            T::zero(),
            T::zero(),
            T::zero(),
            T::zero(),
            T::zero(),
            T::zero(),
            T::zero(),
            T::zero(),
            T::zero(),
            value.ps(),
        ])
    }
}
impl<T: Float> From<Scalar<T>> for Multivector<T, Projective3> {
    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(),
            T::zero(),
            T::zero(),
            T::zero(),
            T::zero(),
            T::zero(),
            T::zero(),
            T::zero(),
            T::zero(),
        ])
    }
}
impl<T: Float> From<Multivector<T, Projective3>> for Flector<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, Projective3>) -> Self {
        Self::new_unchecked(
            mv.get(Blade::from_index(1usize)),
            mv.get(Blade::from_index(2usize)),
            mv.get(Blade::from_index(4usize)),
            mv.get(Blade::from_index(8usize)),
            mv.get(Blade::from_index(7usize)),
            mv.get(Blade::from_index(11usize)),
            mv.get(Blade::from_index(13usize)),
            mv.get(Blade::from_index(14usize)),
        )
    }
}
impl<T: Float> From<Multivector<T, Projective3>> for Line<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, Projective3>) -> Self {
        Self::new_unchecked(
            mv.get(Blade::from_index(3usize)),
            mv.get(Blade::from_index(5usize)),
            mv.get(Blade::from_index(9usize)),
            mv.get(Blade::from_index(6usize)),
            mv.get(Blade::from_index(10usize)),
            mv.get(Blade::from_index(12usize)),
        )
    }
}
impl<T: Float> From<Multivector<T, Projective3>> for Motor<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, Projective3>) -> Self {
        Self::new_unchecked(
            mv.get(Blade::from_index(0usize)),
            mv.get(Blade::from_index(3usize)),
            mv.get(Blade::from_index(5usize)),
            mv.get(Blade::from_index(9usize)),
            mv.get(Blade::from_index(6usize)),
            mv.get(Blade::from_index(10usize)),
            mv.get(Blade::from_index(12usize)),
            mv.get(Blade::from_index(15usize)),
        )
    }
}
impl<T: Float> From<Multivector<T, Projective3>> for Plane<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, Projective3>) -> Self {
        Self::new_unchecked(
            mv.get(Blade::from_index(7usize)),
            mv.get(Blade::from_index(11usize)),
            mv.get(Blade::from_index(13usize)),
            mv.get(Blade::from_index(14usize)),
        )
    }
}
impl<T: Float> From<Multivector<T, Projective3>> for Point<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, Projective3>) -> Self {
        Self::new_unchecked(
            mv.get(Blade::from_index(1usize)),
            mv.get(Blade::from_index(2usize)),
            mv.get(Blade::from_index(4usize)),
            mv.get(Blade::from_index(8usize)),
        )
    }
}
impl<T: Float> From<Multivector<T, Projective3>> for Quadvector<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, Projective3>) -> Self {
        Self::new_unchecked(mv.get(Blade::from_index(15usize)))
    }
}
impl<T: Float> From<Multivector<T, Projective3>> 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, Projective3>) -> Self {
        Self::new_unchecked(mv.get(Blade::from_index(0usize)))
    }
}