getPositionAtTime method

GlobeCoordinates getPositionAtTime(
  1. DateTime time,
  2. DateTime referenceTime
)

Implementation

GlobeCoordinates getPositionAtTime(DateTime time, DateTime referenceTime) {
  final elapsedMs = time.difference(referenceTime).inMilliseconds;
  final periodMs = period.inMilliseconds;

  if (periodMs <= 0) {
    return const GlobeCoordinates(0, 0);
  }

  final phaseRad =
      (initialPhase * math.pi / 180) + (2 * math.pi * elapsedMs / periodMs);
  final trueAnomaly = phaseRad;

  final incRad = inclination * math.pi / 180;
  final raanRad = raan * math.pi / 180;
  final argPeriRad = argumentOfPeriapsis * math.pi / 180;

  final u = trueAnomaly + argPeriRad;

  final latitude = math.asin(math.sin(incRad) * math.sin(u)) * 180 / math.pi;
  final longitude =
      (raanRad + math.atan2(math.cos(incRad) * math.sin(u), math.cos(u))) *
          180 /
          math.pi;

  var normalizedLon = longitude % 360;
  if (normalizedLon > 180) normalizedLon -= 360;
  if (normalizedLon < -180) normalizedLon += 360;

  return GlobeCoordinates(latitude, normalizedLon);
}