pub type Mat3 = [[f64; 3]; 3];
pub fn mul_vec3(m: &Mat3, v: [f64; 3]) -> [f64; 3] {
[
m[0][0] * v[0] + m[0][1] * v[1] + m[0][2] * v[2],
m[1][0] * v[0] + m[1][1] * v[1] + m[1][2] * v[2],
m[2][0] * v[0] + m[2][1] * v[1] + m[2][2] * v[2],
]
}
pub fn inline_rxr(a: &Mat3, b: &Mat3) -> Mat3 {
let mut w = [[0.0_f64; 3]; 3];
for i in 0..3 {
for j in 0..3 {
let mut s = 0.0_f64;
for k in 0..3 {
s += a[i][k] * b[k][j];
}
w[i][j] = s;
}
}
w
}
pub fn inline_tr(r: &Mat3) -> Mat3 {
let mut rt = [[0.0_f64; 3]; 3];
for i in 0..3 {
for j in 0..3 {
rt[i][j] = r[j][i];
}
}
rt
}
pub fn inline_mxmxm(a: &Mat3, b: &Mat3, c: &Mat3) -> Mat3 {
let mut w = [[0.0_f64; 3]; 3];
for i in 0..3 {
for l in 0..3 {
let mut s = 0.0_f64;
let mut comp = 0.0_f64; for j in 0..3 {
for k in 0..3 {
let term = a[i][j] * b[j][k] * c[k][l];
let y = term - comp;
let t = s + y;
comp = (t - s) - y;
s = t;
}
}
w[i][l] = s;
}
}
w
}