del_geo/
vec2.rs

1//! methods for 2D vector
2
3pub fn sub_<T>(a: &[T; 2], b: &[T; 2]) -> [T; 2]
4where
5    T: std::ops::Sub<Output = T> + Copy,
6{
7    [a[0] - b[0], a[1] - b[1]]
8}
9
10pub fn from_homogeneous<Real>(v: &[Real; 3]) -> Option<[Real; 2]>
11where
12    Real: num_traits::Float,
13{
14    if v[2].is_zero() {
15        return None;
16    }
17    Some([v[0] / v[2], v[0] / v[2]])
18}
19
20// -------------------------------
21pub fn rotate90<T>(v: &nalgebra::Vector2<T>) -> nalgebra::Vector2<T>
22where
23    T: nalgebra::RealField + Copy,
24{
25    nalgebra::Vector2::<T>::new(-v[1], v[0])
26}
27
28pub fn norm_squared<T>(v: &nalgebra::Vector2<T>) -> T
29where
30    T: std::ops::Mul<Output = T> + std::ops::Add<Output = T> + Copy,
31{
32    v[0] * v[0] + v[1] * v[1]
33}
34
35pub fn basis<T>(i_dim: usize, eps: T) -> nalgebra::Vector2<T>
36where
37    T: nalgebra::RealField,
38{
39    let mut b = nalgebra::Vector2::<T>::zeros();
40    b[i_dim] = eps;
41    b
42}