pub fn neg(a: [f64; 2]) -> [f64; 2] {
[-a[0], -a[1]]
}
pub fn add(a: [f64; 2], b: [f64; 2]) -> [f64; 2] {
[a[0] + b[0], a[1] + b[1]]
}
pub fn sub(a: [f64; 2], b: [f64; 2]) -> [f64; 2] {
[a[0] - b[0], a[1] - b[1]]
}
pub fn mul(a: [f64; 2], n: f64) -> [f64; 2] {
[a[0] * n, a[1] * n]
}
pub fn div(a: [f64; 2], n: f64) -> [f64; 2] {
[a[0] / n, a[1] / n]
}
pub fn per(a: [f64; 2]) -> [f64; 2] {
[a[1], -a[0]]
}
pub fn dpr(a: [f64; 2], b: [f64; 2]) -> f64 {
a[0] * b[0] + a[1] * b[1]
}
pub fn is_equal(a: [f64; 2], b: [f64; 2]) -> bool {
a[0] == b[0] && a[1] == b[1]
}
pub fn len(a: [f64; 2]) -> f64 {
(a[0].powi(2) + a[1].powi(2)).sqrt()
}
pub fn len2(a: [f64; 2]) -> f64 {
a[0] * a[0] + a[1] * a[1]
}
pub fn dist2(a: [f64; 2], b: [f64; 2]) -> f64 {
len2(sub(a, b))
}
pub fn uni(a: [f64; 2]) -> [f64; 2] {
div(a, len(a))
}
pub fn dist(a: [f64; 2], b: [f64; 2]) -> f64 {
((a[1] - b[1]).powi(2) + (a[0] - b[0]).powi(2)).sqrt()
}
#[allow(dead_code)]
pub fn med(a: [f64; 2], b: [f64; 2]) -> [f64; 2] {
mul(add(a, b), 0.5)
}
pub fn rot_around(a: [f64; 2], c: [f64; 2], r: f64) -> [f64; 2] {
let s = r.sin();
let c_val = r.cos();
let px = a[0] - c[0];
let py = a[1] - c[1];
let nx = px * c_val - py * s;
let ny = px * s + py * c_val;
[nx + c[0], ny + c[1]]
}
pub fn lrp(a: [f64; 2], b: [f64; 2], t: f64) -> [f64; 2] {
add(a, mul(sub(b, a), t))
}
#[allow(dead_code)]
pub fn prj(a: [f64; 2], b: [f64; 2], c: f64) -> [f64; 2] {
add(a, mul(b, c))
}