getSunLocation function

LatLng getSunLocation(
  1. DateTime utcNow
)

Calculates the Sun position on a given UTC time.

Implementation

LatLng getSunLocation(DateTime utcNow) {
  var gst = _toGreenwichMeanSiderealTime(utcNow);
  double num1 = _toJulian(utcNow) * 2.7378507871321E-05;
  double num2 = num1 * num1;
  double num3 = pi /
      180.0 *
      ((280.466457 + 36000.7698278 * num1 + 0.00030322 * num2) % 360.0);
  double num4 = pi /
      180.0 *
      ((282.937348 + 1.7195366 * num1 + 0.00045688 * num2) % 360.0);
  double num5 = 0.01670843 - 4.2037E-05 * num1 - 1.267E-07 * num2;
  double num6 = num3 - num4;
  double d = num6;
  double num7;
  do {
    num7 = d;
    d = num7 + (num6 + num5 * sin(num7) - num7) / (1.0 - num5 * cos(num7));
  } while ((d - num7).abs() > 1E-09);
  double num8 = 2.0 * atan(sqrt((1.0 + num5) / (1.0 - num5)) * tan(0.5 * d));
  double num9 = num4 + num8;
  var distanceUA = 1.000001018 * (1.0 - num5 * cos(d));
  double num10 = distanceUA * 149597870.0;
  double num11 = pi /
      180.0 *
      (84381.448 - 46.815 * num1 - 0.00059 * num2 + 0.001813 * num1 * num2) *
      0.000277777777777778;
  double num12 = num10 * sin(num9);
  var sunX = num10 * cos(num9);
  var sunY = num12 * cos(num11);
  var sunZ = num12 * sin(num11);

  final latlng = _toLatLng(gst, sunX, sunY, sunZ);
  return latlng;
}