reduceB1950ToJ2000 function

({double inc, double node, double peri}) reduceB1950ToJ2000(
  1. double inc,
  2. double peri,
  3. double node
)

Reduce ecliptical elements from B1950 to J2000.

inc, peri, node are inclination, argument of perihelion, and longitude of ascending node, all in radians. Returns corrected values in radians.

Implementation

({double inc, double peri, double node}) reduceB1950ToJ2000(
    double inc, double peri, double node) {
  const nodePrime = 174.298 * _p;
  const psiA = 47.0029 * _p;

  final sNd = math.sin(node - nodePrime);
  final cNd = math.cos(node - nodePrime);
  final si = math.sin(inc);
  final ci = math.cos(inc);

  final a = si * sNd;
  final b = -math.sin(psiA) * ci + math.cos(psiA) * si * cNd;
  final incNew = math.asin(math.sqrt(a * a + b * b));
  final nodeNew = math.atan2(a, b) + 174.997 * _p;
  final periNew = peri + math.atan2(-math.sin(psiA) * sNd,
      si * math.cos(psiA) - ci * math.sin(psiA) * cNd);

  return (inc: incNew, peri: periNew, node: nodeNew);
}