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
use crate;
/// Form rotation matrix given the Fukushima-Williams angles.
///
/// Given:
/// gamb f64 F-W angle gamma_bar (radians)
/// phib f64 F-W angle phi_bar (radians)
/// psi f64 F-W angle psi (radians)
/// eps f64 F-W angle epsilon (radians)
///
/// Returned:
/// [[f64; 3]; 3] rotation matrix
///
/// Notes:
///
/// 1) Naming the following points:
///
/// e = J2000.0 ecliptic pole,
/// p = GCRS pole,
/// E = ecliptic pole of date,
/// and P = CIP,
///
/// the four Fukushima-Williams angles are as follows:
///
/// gamb = gamma = epE
/// phib = phi = pE
/// psi = psi = pEP
/// eps = epsilon = EP
///
/// 2) The matrix representing the combined effects of frame bias,
/// precession and nutation is:
///
/// NxPxB = R_1(-eps).R_3(-psi).R_1(phib).R_3(gamb)
///
/// 3) The present function can construct three different matrices,
/// depending on which angles are supplied as the arguments gamb,
/// phib, psi and eps:
///
/// o To obtain the nutation x precession x frame bias matrix,
/// first generate the four precession angles known conventionally
/// as gamma_bar, phi_bar, psi_bar and epsilon_A, then generate
/// the nutation components Dpsi and Depsilon and add them to
/// psi_bar and epsilon_A, and finally call the present function
/// using those four angles as arguments.
///
/// o To obtain the precession x frame bias matrix, generate the
/// four precession angles and call the present function.
///
/// o To obtain the frame bias matrix, generate the four precession
/// angles for date J2000.0 and call the present function.
///
/// The nutation-only and precession-only matrices can if necessary
/// be obtained by combining these three appropriately.
///
/// References:
///
/// Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855
///
/// Hilton, J. et al., 2006, Celest.Mech.Dyn.Astron. 94, 351