heliocentric function

({double lat, double lon, double r}) heliocentric(
  1. double jde
)

J2000 heliocentric coordinates of Pluto.

Returns (lon, lat, r) where lon/lat are in radians and r is in AU.

Implementation

({double lon, double lat, double r}) heliocentric(double jde) {
  final t = j2000Century(jde);
  final j = (34.35 + 3034.9057 * t) * _p;
  final s = (50.08 + 1222.1138 * t) * _p;
  final pp = (238.96 + 144.96 * t) * _p;

  var l = 0.0, b = 0.0, r = 0.0;
  for (final row in _t37) {
    final alpha = row.i * j + row.j * s + row.k * pp;
    final sa = math.sin(alpha);
    final ca = math.cos(alpha);
    l += row.lA * sa + row.lB * ca;
    b += row.bA * sa + row.bB * ca;
    r += row.rA * sa + row.rB * ca;
  }
  l = (238.958116 + 144.96 * t + l) * _p;
  b = (-3.908239 + b) * _p;
  r += 40.7241346;
  return (lon: l, lat: b, r: r);
}