use crate::{Metric, RealMultiVector};
impl RealMultiVector {
pub fn new_euclidean(data: Vec<f64>, dim: usize) -> Self {
Self::new(data, Metric::Euclidean(dim)).unwrap()
}
}
impl RealMultiVector {
pub fn new_complex_number(real: f64, imag: f64) -> Self {
let data = vec![real, imag];
Self::new(data, Metric::NonEuclidean(1)).unwrap()
}
pub fn new_split_complex(a: f64, b: f64) -> Self {
let data = vec![a, b];
Self::new(data, Metric::Euclidean(1)).unwrap()
}
pub fn new_quaternion(w: f64, x: f64, y: f64, z: f64) -> Self {
let data = vec![w, x, y, z];
Self::new(data, Metric::NonEuclidean(2)).unwrap()
}
pub fn new_split_quaternion(a: f64, b: f64, c: f64, d: f64) -> Self {
let data = vec![a, b, c, d];
Self::new(data, Metric::Euclidean(2)).unwrap()
}
}
impl RealMultiVector {
pub fn new_aps_vector(data: Vec<f64>) -> Self {
Self::new(data, Metric::Euclidean(3)).unwrap()
}
pub fn new_spacetime_algebra_1_3(data: Vec<f64>) -> Self {
Self::new(data, Metric::Minkowski(4)).unwrap()
}
pub fn new_spacetime_algebra_3_1(data: Vec<f64>) -> Self {
Self::new(
data,
Metric::Custom {
dim: 4,
neg_mask: 1,
zero_mask: 0,
},
)
.unwrap()
}
pub fn new_cga_vector(data: Vec<f64>) -> Self {
Self::new(data, Metric::Generic { p: 4, q: 1, r: 0 }).unwrap()
}
}