JuliaGeometry / Rotations.jl

Julia implementations for different rotation parameterizations
https://juliageometry.github.io/Rotations.jl
MIT License
180 stars 44 forks source link

Rotations in degrees (`Unitful.°`) are inexact #196

Open plut opened 2 years ago

plut commented 2 years ago

The main reason to define a rotation with an angle in degree is to take advantage of the guaranteed-exact functions cosd and sind, e.g. Angle2d(90°)^4 is guaranteed to be the identity.

With the last version of this package, this is not the case:

julia> r=Angle2d(90°)
2×2 Angle2d{Float64} with indices SOneTo(2)×SOneTo(2)(1.5708):
 6.12323e-17  -1.0
 1.0           6.12323e-17
julia> r.theta
1.5707963267948966

A (relatively simple) fix is replacing the one-parameter type Angle2d{T} by Angle2d{T,A}, where A is the angle type. (However, the bad news is that once this is solved for Angle2d, it needs to be replicated for all other angle-based types).

plut commented 2 years ago

Here is the PR.