getPositionAtTime method
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);
}