pga2d/
pseudoscalar.rs

1use std::ops::Mul;
2
3use crate::Scalar;
4
5/// Grade-3 blade, also known as I
6pub struct PseudoScalar {
7    pub e012: Scalar,
8}
9
10impl Mul<Scalar> for PseudoScalar {
11    type Output = PseudoScalar;
12
13    fn mul(self, s: Scalar) -> PseudoScalar {
14        PseudoScalar::from(self.e012 * s)
15    }
16}
17
18impl Mul<PseudoScalar> for Scalar {
19    type Output = PseudoScalar;
20
21    fn mul(self, ps: PseudoScalar) -> PseudoScalar {
22        ps * self
23    }
24}
25
26impl From<Scalar> for PseudoScalar {
27    fn from(s: Scalar) -> PseudoScalar {
28        PseudoScalar { e012: s }
29    }
30}
31
32impl From<PseudoScalar> for Scalar {
33    fn from(ps: PseudoScalar) -> Scalar {
34        ps.e012
35    }
36}
37
38impl PseudoScalar {
39    pub fn ideal_norm(self) -> Scalar {
40        self.e012
41    }
42}