module Geometry export angle2, norm2d, sq_norm2d using StaticArrays: SVector """ angle2(a::SVector{2,R}, b::SVector{2,R}) where {R<:Real} Return the angle `φ` from vector `a` to `b` while `φ` ∈ [-π, π]. """ function angle2(a::SVector{2,R}, b::SVector{2,R}) where {R<:Real} θ_a = atan(a[2], a[1]) θ_b = atan(b[2], b[1]) θ = θ_b - θ_a return rem2pi(θ, RoundNearest) end function sq_norm2d(v::SVector{2,R}) where {R<:Real} return v[1]^2 + v[2]^2 end function norm2d(v::SVector{2,R}) where {R<:Real} return sqrt(sq_norm2d(v)) end end # module