pub fn add_2d(a: [f64; 2], b: [f64; 2]) -> [f64; 2] {
[a[0] + b[0], a[1] + b[1]]
}
pub fn subtract_2d(a: [f64; 2], b: [f64; 2]) -> [f64; 2] {
[a[0] - b[0], a[1] - b[1]]
}
pub fn dot_2d(a: [f64; 2], b: [f64; 2]) -> f64 {
a[0] * b[0] + a[1] * b[1]
}
pub fn scale_2d(a: [f64; 2], scalar: f64) -> [f64; 2] {
[a[0] * scalar, a[1] * scalar]
}
pub fn magnitude_2d(a: [f64; 2]) -> f64 {
(a[0] * a[0] + a[1] * a[1]).sqrt()
}
pub fn normalize_2d(a: &[f64; 2]) -> [f64; 2] {
let mag = magnitude_2d(*a);
scale_2d(*a, 1.0 / mag)
}