forked from JuliaSpace/ReferenceFrameRotations.jl
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapi.jl
More file actions
77 lines (59 loc) · 3.63 KB
/
Copy pathapi.jl
File metadata and controls
77 lines (59 loc) · 3.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
## Description #############################################################################
#
# Julia API functions to implement conversions between representations.
#
############################################################################################
# == Conversions to DCM ====================================================================
Base.convert(::Type{<:DCM}, a::EulerAngles) = angle_to_dcm(a)
Base.convert(::Type{<:DCM}, a::Quaternion) = quat_to_dcm(a)
Base.convert(::Type{<:DCM}, a::EulerAngleAxis) = angleaxis_to_dcm(a)
Base.convert(::Type{<:DCM}, a::CRP) = crp_to_dcm(a)
Base.convert(::Type{<:DCM}, a::MRP) = mrp_to_dcm(a)
# == Conversion to Euler Angles ============================================================
function Base.convert(::Type{<:_EulerAngleConversion{R}}, a::DCM) where R
return dcm_to_angle(a, R)
end
function Base.convert(::Type{<:_EulerAngleConversion{R}}, a::EulerAngles) where R
return angle_to_angle(a, R)
end
function Base.convert(::Type{<:_EulerAngleConversion{R}}, a::EulerAngleAxis) where R
return angleaxis_to_angle(a, R)
end
function Base.convert(::Type{<:_EulerAngleConversion{R}}, a::Quaternion) where R
return quat_to_angle(a, R)
end
function Base.convert(::Type{<:_EulerAngleConversion{R}}, a::CRP) where R
return crp_to_angle(a, R)
end
function Base.convert(::Type{<:_EulerAngleConversion{R}}, a::MRP) where R
return mrp_to_angle(a, R)
end
Base.convert(::Type{<:EulerAngles}, a::DCM) = dcm_to_angle(a, :ZYX)
Base.convert(::Type{<:EulerAngles}, a::EulerAngleAxis) = angleaxis_to_angle(a, :ZYX)
Base.convert(::Type{<:EulerAngles}, a::Quaternion) = quat_to_angle(a, :ZYX)
Base.convert(::Type{<:EulerAngles}, a::CRP) = crp_to_angle(a, :ZYX)
Base.convert(::Type{<:EulerAngles}, a::MRP) = mrp_to_angle(a, :ZYX)
# == Conversions to Euler Angle and Axis ===================================================
Base.convert(::Type{<:EulerAngleAxis}, a::DCM) = dcm_to_angleaxis(a)
Base.convert(::Type{<:EulerAngleAxis}, a::EulerAngles) = angle_to_angleaxis(a)
Base.convert(::Type{<:EulerAngleAxis}, a::Quaternion) = quat_to_angleaxis(a)
Base.convert(::Type{<:EulerAngleAxis}, a::CRP) = crp_to_angleaxis(a)
Base.convert(::Type{<:EulerAngleAxis}, a::MRP) = mrp_to_angleaxis(a)
# == Conversions to Quaternions ============================================================
Base.convert(::Type{<:Quaternion}, a::DCM) = dcm_to_quat(a)
Base.convert(::Type{<:Quaternion}, a::EulerAngles) = angle_to_quat(a)
Base.convert(::Type{<:Quaternion}, a::EulerAngleAxis) = angleaxis_to_quat(a)
Base.convert(::Type{<:Quaternion}, a::CRP) = crp_to_quat(a)
Base.convert(::Type{<:Quaternion}, a::MRP) = mrp_to_quat(a)
# == Conversions to CRP ====================================================================
Base.convert(::Type{<:CRP}, a::DCM) = dcm_to_crp(a)
Base.convert(::Type{<:CRP}, a::Quaternion) = quat_to_crp(a)
Base.convert(::Type{<:CRP}, a::EulerAngles) = dcm_to_crp(angle_to_dcm(a))
Base.convert(::Type{<:CRP}, a::EulerAngleAxis) = dcm_to_crp(angleaxis_to_dcm(a))
Base.convert(::Type{<:CRP}, a::MRP) = dcm_to_crp(mrp_to_dcm(a))
# == Conversions to MRP ====================================================================
Base.convert(::Type{<:MRP}, a::DCM) = dcm_to_mrp(a)
Base.convert(::Type{<:MRP}, a::Quaternion) = quat_to_mrp(a)
Base.convert(::Type{<:MRP}, a::EulerAngles) = dcm_to_mrp(angle_to_dcm(a))
Base.convert(::Type{<:MRP}, a::EulerAngleAxis) = dcm_to_mrp(angleaxis_to_dcm(a))
Base.convert(::Type{<:MRP}, a::CRP) = dcm_to_mrp(crp_to_dcm(a))