38 const Scalar lambda_M =
46 const Scalar lambda_ec =
47 lambda_M + (1.914666471 * sin(M) + 0.019994643 * sin(2.0 * M)) *
51 const Scalar epsilon =
55 const Scalar sin_lambda = sin(lambda_ec);
56 const Scalar cos_lambda = cos(lambda_ec);
57 const Scalar cos_eps = cos(epsilon);
58 const Scalar sin_eps = sin(epsilon);
60 const Scalar ra = atan2(cos_eps * sin_lambda, cos_lambda);
61 const Scalar dec = asin(sin_eps * sin_lambda);
144 const Scalar T2 = T * T;
145 const Scalar T3 = T2 * T;
146 const Scalar T4 = T3 * T;
149 const Scalar Lp = 218.3164477 + 481267.88123421 * T - 0.0015786 * T2 +
150 T3 / 538841.0 - T4 / 65194000.0;
153 const Scalar D = 297.8501921 + 445267.1114034 * T - 0.0018819 * T2 +
154 T3 / 545868.0 - T4 / 113065000.0;
158 357.5291092 + 35999.0502909 * T - 0.0001536 * T2 + T3 / 24490000.0;
161 const Scalar Mp = 134.9633964 + 477198.8675055 * T + 0.0087414 * T2 +
162 T3 / 69699.0 - T4 / 14712000.0;
165 const Scalar F = 93.2720950 + 483202.0175233 * T - 0.0036539 * T2 -
166 T3 / 3526000.0 + T4 / 863310000.0;
175 const Scalar dL = 6288774.0 * janus::sin(Mp_rad) +
176 1274027.0 * janus::sin(2.0 * D_rad - Mp_rad) +
177 658314.0 * janus::sin(2.0 * D_rad) +
178 213618.0 * janus::sin(2.0 * Mp_rad) -
179 185116.0 * janus::sin(M_rad) -
180 114332.0 * janus::sin(2.0 * F_rad);
183 const Scalar dB = 5128122.0 * janus::sin(F_rad) +
184 280602.0 * janus::sin(Mp_rad + F_rad) +
185 277693.0 * janus::sin(Mp_rad - F_rad) +
186 173237.0 * janus::sin(2.0 * D_rad - F_rad);
189 const Scalar dR = -20905355.0 * janus::cos(Mp_rad) -
190 3699111.0 * janus::cos(2.0 * D_rad - Mp_rad) -
191 2955968.0 * janus::cos(2.0 * D_rad) -
192 569925.0 * janus::cos(2.0 * Mp_rad);
195 const Scalar lambda = Lp + dL / 1000000.0;
196 const Scalar beta = dB / 1000000.0;
199 const Scalar dist_km = 385000.56 + dR / 1000.0;
200 const Scalar dist = dist_km * 1000.0;
207 const Scalar epsilon =
211 const Scalar cos_lambda = janus::cos(lambda_rad);
212 const Scalar sin_lambda = janus::sin(lambda_rad);
213 const Scalar cos_beta = janus::cos(beta_rad);
214 const Scalar sin_beta = janus::sin(beta_rad);
215 const Scalar cos_eps = janus::cos(epsilon);
216 const Scalar sin_eps = janus::sin(epsilon);
219 r_moon(0) = dist * cos_beta * cos_lambda;
220 r_moon(1) = dist * (cos_eps * cos_beta * sin_lambda - sin_eps * sin_beta);
221 r_moon(2) = dist * (sin_eps * cos_beta * sin_lambda + cos_eps * sin_beta);
254 const Scalar gmst_deg = 280.46061837 + 360.98564736629 * (jd - 2451545.0) +
255 0.000387933 * T * T - T * T * T / 38710000.0;
259 const Scalar cos_gmst = janus::cos(gmst_rad);
260 const Scalar sin_gmst = janus::sin(gmst_rad);
263 r_ecef(0) = cos_gmst * r_eci(0) + sin_gmst * r_eci(1);
264 r_ecef(1) = -sin_gmst * r_eci(0) + cos_gmst * r_eci(1);
265 r_ecef(2) = r_eci(2);
281 const Scalar gmst_deg = 280.46061837 + 360.98564736629 * (jd - 2451545.0) +
282 0.000387933 * T * T - T * T * T / 38710000.0;
285 const Scalar cos_gmst = janus::cos(gmst_rad);
286 const Scalar sin_gmst = janus::sin(gmst_rad);
289 r_ecef(0) = cos_gmst * r_eci(0) + sin_gmst * r_eci(1);
290 r_ecef(1) = -sin_gmst * r_eci(0) + cos_gmst * r_eci(1);
291 r_ecef(2) = r_eci(2);