localLunarEclipse function
The Moon's position at each contact of lunar eclipse eclipse for a
place at geodetic latitude and longitude (degrees, east positive)
and height above sea level in metres. deltaTSeconds overrides the
ΔT model.
Implementation
LocalLunarEclipse localLunarEclipse(
Ephemeris ephemeris,
LunarEclipse eclipse, {
required double latitude,
required double longitude,
double height = 0,
double? deltaTSeconds,
}) {
final observer = Observer(
latitude: latitude,
longitude: longitude,
height: height,
);
LunarEclipseContact contact(double t) {
final moon = horizontalPosition(
ephemeris,
Naif.moon,
observer,
t,
deltaTSeconds: deltaTSeconds,
);
final semidiameter = math.asin(moonRadius / moon.distance) / _degree;
return LunarEclipseContact(
jdTT: t,
altitude: moon.altitude,
azimuth: moon.azimuth,
visible: moon.altitude > starHorizonAltitude - semidiameter,
);
}
LunarEclipseContact? optional(double? t) => t == null ? null : contact(t);
return LocalLunarEclipse(
eclipse: eclipse,
penumbralBegin: contact(eclipse.penumbralBegin),
partialBegin: optional(eclipse.partialBegin),
totalBegin: optional(eclipse.totalBegin),
maximum: contact(eclipse.jdTT),
totalEnd: optional(eclipse.totalEnd),
partialEnd: optional(eclipse.partialEnd),
penumbralEnd: contact(eclipse.penumbralEnd),
);
}