@@ -6,6 +6,9 @@ struct Quaternion{T<:Real} <: Number
66 norm:: Bool
77end
88
9+ (:: Type{Quaternion{T}} )(x:: Real ) where {T} = Quaternion {T} (x, 0 , 0 , 0 , false )
10+ (:: Type{Quaternion{T}} )(q:: Quaternion{T} ) where {T<: Real } = q
11+ (:: Type{Quaternion{T}} )(q:: Quaternion ) where {T<: Real } = Quaternion {T} (q. s, q. v1, q. v2, q. v3, q. norm)
912Quaternion (s:: Real , v1:: Real , v2:: Real , v3:: Real , n:: Bool = false ) =
1013 Quaternion (promote (s, v1, v2, v3)... , n)
1114Quaternion (x:: Real ) = Quaternion (x, zero (x), zero (x), zero (x), abs (x) == one (x))
9497
9598angleaxis (q:: Quaternion ) = angle (q), axis (q)
9699
97- angle (q:: Quaternion ) = 2 * atan2 (√ (q. v1^ 2 + q. v2^ 2 + q. v3^ 2 ), q. s)
100+ angle (q:: Quaternion ) = 2 * atan (√ (q. v1^ 2 + q. v2^ 2 + q. v3^ 2 ), q. s)
98101
99102function axis (q:: Quaternion )
100103 q = normalize (q)
@@ -121,7 +124,7 @@ function log(q::Quaternion)
121124 q, a = normalizea (q)
122125 s = q. s
123126 M = abs_imag (q)
124- th = atan2 (M, s)
127+ th = atan (M, s)
125128 if M > 0
126129 M = th / M
127130 return Quaternion (log (a), q. v1 * M, q. v2 * M, q. v3 * M)
@@ -208,7 +211,7 @@ function qrotation(rotvec::Vector{T}) where {T <: Real}
208211 Quaternion (one (T), zero (T), zero (T), zero (T), true )
209212end
210213
211- function qrotation {T<:Real} (dcm:: Matrix{T} )
214+ function qrotation (dcm:: Matrix{T} ) where {T <: Real }
212215 # See https://arxiv.org/pdf/math/0701759.pdf
213216 a2 = 1 + dcm[1 ,1 ] + dcm[2 ,2 ] + dcm[3 ,3 ]
214217 b2 = 1 + dcm[1 ,1 ] - dcm[2 ,2 ] - dcm[3 ,3 ]
@@ -230,7 +233,7 @@ function qrotation{T<:Real}(dcm::Matrix{T})
230233 end
231234end
232235
233- function qrotation {T<:Real} (dcm:: Matrix{T} , qa:: Quaternion )
236+ function qrotation (dcm:: Matrix{T} , qa:: Quaternion ) where {T <: Real }
234237 q = qrotation (dcm)
235238 abs (q- qa) < abs (q+ qa) ? q : - q
236239end
0 commit comments