use super::{Point2d, Vector2d};
use cgmath::prelude::*;
pub fn project_local(
point: Point2d,
origin: Point2d,
x_axis: Vector2d,
y_axis: Vector2d,
) -> Point2d {
let point = point - origin;
Point2d::new(point.dot(x_axis), point.dot(y_axis))
}
pub fn rot90(vec: Vector2d) -> Vector2d {
Vector2d::new(-vec.y, vec.x)
}
#[inline(always)]
pub fn normalize_with_derivative(v: Vector2d, dv: Vector2d) -> (Vector2d, Vector2d) {
let mag = v.magnitude();
let s = v / mag;
let ds = (dv - s * s.dot(dv)) / mag;
(s, ds)
}