OWAO 2025, Практически тур — Задача 2. At the World’s Edge
ΩWAO 2025 ◇ Practical Round ◇ Problems · 20 т.
Условие
Cape Fligely () is located on the northern coast of Rudolf Island in Franz Josef Land, Russian Federation. It is the northernmost point of Russia, Europe, and the Eurasian continent as a whole.
a) Find the distance from the cape to the North Pole of the Earth. [2 т.]
b) At what solar declination does the polar day begin at the cape? Assume that atmospheric refraction at the horizon is . [2 т.]
You are provided with a table eclipses.xlsx of lunar eclipses of the 21st century. The table lists the eclipse date, Saros number, gamma, the moments of the Moon’s disk contacts with the Earth’s shadow (see Fig. 1), and the time of greatest eclipse.
c) How many total lunar eclipses will occur in the 21st century? partial? penumbral? [4 т.]
Point lies on the equator at the same longitude, somewhere in the Indian Ocean.
d) Determine how many total lunar eclipses will be visible from both Cape Fligely and point . List the corresponding event numbers.
Count an eclipse as visible if any part of totality occurs above the horizon. Ignore events visible only in partial phases. [12 т.]
Gamma is the distance of the center of the Moon’s disk from the center of the Earth’s umbral shadow, expressed in units of Earth’s equatorial radius. It is defined at the moment of greatest eclipse, when its absolute value reaches a minimum. For a lunar eclipse, it shows whether the Moon passes north or south of the center of the Earth’s shadow; a positive value means the Moon passes to the north of the center.

Отговори
a) 906 km
b) 7.3 °
δ☉ = +7.3°
c) 21st century: 85 total, 57 partial, 88 penumbral; since OWAO 2025: 62 total, 44 partial, 66 penumbral (both interpretations accepted).
d) 28 in the 21st century (23 since OWAO 2025): events 1, 8, 15, 26, 58, 66, 68, 75, 82, 84, 93, 101, 107, 118, 125, 140, 143, 150, 164, 182, 184, 189, 191, 205, 206, 207, 216, 224.
Решение
Solution
a) The distance from Cape Fligely to the North Pole is simply the meridional arc:
b) The polar day begins when, at lower culmination, the upper limb of the Sun just touches the apparent horizon. In terms of the Sun’s center, this condition is
where is the Sun’s angular diameter and is the correction for atmospheric refraction. The corresponding solar declination is obtained from the formula for the altitude at lower culmination:
c) Although the eclipse type can in principle be inferred from the value of , a more straightforward approach is to classify it directly from the reported contact times:
- Penumbral: only penumbral contacts, which are not listed in the table;
- Partial: two umbral contacts are present (U1, U4);
- Total: all four umbral contacts are present.
The counts are shown in Table 1.
d) Given the complexity of a fully manual approach, two possible strategies can be pursued:
- to use astronomical software, such as the AstroPy package, to obtain precise results;
- to simplify the problem by considering only the dominant physical effects, thus obtaining an approximate answer with an associated uncertainty.
The code in Appendix A (page 16) demonstrates the first strategy, implemented in Python with AstroPy. Tables 1 and 2 demonstrate the results.
Table 1: Summary statistics of total lunar eclipses in the 21st century
| Counts | 21st century | Since OWAO 2025 |
|---|---|---|
| Penubral eclipses | 88 | 66 |
| Partial eclipses | 57 | 44 |
| Total eclipses | 85 | 62 |
| Visible from… | ||
| Cape Fligely | 49 | 36 |
| Point | 47 | 39 |
| both places | 28 | 23 |
Table 2: Visibility of total lunar eclipses in the 21st century from Cape Fligely and from point on the equator (same longitude). A check mark indicates that at least part of totality is visible from the location. The 58th eclipse occured on September 7th, 2025, two weeks before OWAO 2025 started.
| Eclipse No. | Visibility: Equator | Cape Fl. | both | Eclipse No. | Visibility: Equator | Cape Fl. | both |
|---|---|---|---|---|---|---|---|
| 1 | ✓ | ✓ | ✓ | 115 | ✓ | ||
| 7 | 116 | ✓ | |||||
| 8 | ✓ | ✓ | ✓ | 117 | ✓ | ||
| 9 | ✓ | 118 | ✓ | ✓ | ✓ | ||
| 10 | ✓ | 123 | ✓ | ||||
| 15 | ✓ | ✓ | ✓ | 124 | |||
| 16 | 125 | ✓ | ✓ | ✓ | |||
| 17 | ✓ | 133 | ✓ | ||||
| 24 | ✓ | 134 | ✓ | ||||
| 25 | ✓ | 140 | ✓ | ✓ | ✓ | ||
| 26 | ✓ | ✓ | ✓ | 141 | |||
| 32 | 142 | ||||||
| 33 | ✓ | 143 | ✓ | ✓ | ✓ | ||
| 34 | 148 | ✓ | |||||
| 35 | ✓ | 149 | ✓ | ||||
| 41 | ✓ | 150 | ✓ | ✓ | ✓ | ||
| 42 | ✓ | 157 | ✓ | ||||
| 43 | ✓ | 158 | |||||
| 49 | 159 | ✓ | |||||
| 51 | 164 | ✓ | ✓ | ✓ | |||
| 52 | ✓ | 165 | ✓ | ||||
| 57 | 166 | ✓ | |||||
| 58 | ✓ | ✓ | ✓ | 167 | ✓ | ||
| 59 | ✓ | 174 | ✓ | ||||
| 66 | ✓ | ✓ | ✓ | 175 | ✓ | ||
| 67 | 182 | ✓ | ✓ | ✓ | |||
| 68 | ✓ | ✓ | ✓ | 183 | |||
| 74 | ✓ | 184 | ✓ | ✓ | ✓ | ||
| 75 | ✓ | ✓ | ✓ | 189 | ✓ | ✓ | ✓ |
| 76 | ✓ | 190 | ✓ | ||||
| 77 | ✓ | 191 | ✓ | ✓ | ✓ | ||
| 82 | ✓ | ✓ | ✓ | 199 | ✓ | ||
| 83 | ✓ | 200 | ✓ | ||||
| 84 | ✓ | ✓ | ✓ | 205 | ✓ | ✓ | ✓ |
| 92 | 206 | ✓ | ✓ | ✓ | |||
| 93 | ✓ | ✓ | ✓ | 207 | ✓ | ✓ | ✓ |
| 99 | ✓ | 208 | ✓ | ||||
| 100 | ✓ | 215 | |||||
| 101 | ✓ | ✓ | ✓ | 216 | ✓ | ✓ | ✓ |
| 102 | 224 | ✓ | ✓ | ✓ | |||
| 107 | ✓ | ✓ | ✓ | 225 | ✓ | ||
| 108 | 226 | ✓ | |||||
| 109 | ✓ |
Discussion
How can the visibility of a lunar eclipse be assessed without relying on specialized software? The problem reduces to determining whether the Moon is above the local horizon during the total phase. This, in turn, depends on a number of astronomical and observational factors:
- the declination of the Moon, which varies with date;
- the hour angle of the Moon, determined by local time;
- the equation of time, which links apparent solar time to mean time;
- the angular diameter of the Moon;
- atmospheric refraction near the horizon;
- the diurnal parallax of the Moon;
- the eclipse gamma parameter, characterizing the Moon’s trajectory through the Earth’s shadow.
Analysis for Cape Fligely
At Cape Fligely’s extreme northern latitude, the Moon’s diurnal path is nearly parallel to the horizon. The dominant factor determining visibility is the Moon’s declination: a large arc of the ecliptic remains permanently above the horizon, while another part remains permanently below it.
Since a lunar eclipse always occurs at full Moon, when the Moon is in opposition to the Sun, the following conclusions hold:
Winter eclipses: if the Moon’s declination is greater than about , the Moon does not set and the eclipse is entirely visible.
Summer eclipses: if the Moon’s declination is less than
then the Moon does not rise and the eclipse is entirely invisible.
Near the equinoxes: visibility should be checked on a case-by-case basis.
Analysis for point
At the equator the situation is essentially reversed. The Moon rises and sets every day, spending on average about 12 hours above the horizon (slightly more when minor effects are considered). Consequently, the key factor for visibility is the local time of the eclipse contacts. Since a lunar eclipse occurs at full Moon, the event is visible whenever the Moon is above the horizon, i.e. roughly from six hours before until six hours after local midnight.
The local time at point is related to UTC by
Neglecting the equation of time, this means that total eclipses are observable from point if the totality occurs between about 14:00 and 02:00 UTC. Events close to these boundaries require special attention.
The Moon’s topocentric altitude and azimuth at any time and for any terrestrial location may be obtained from authoritative ephemeris services, such as the JPL Horizons system.
Marking Scheme:
Question (a) Distance to the North Pole — 2 pt.
Question (b) Polar days — 2 pt.
Question (c) Eclipses count
3+1 pt.: 1 pt. for each correctly obtained amount, 1 pt. for the correct explanation.
Question (d) Eclipses visibility
- Description of the solution methodology — 5 pt.
- Calculation for the Cape — 3 pt.
- Calculation for the point — 3 pt.
- Obtaining the correct answer — 1 pt.
Note. To avoid ambiguity, both the total number of eclipses in the 21st century and the number of eclipses since OWAO 2025 (i.e. starting from the 59th event, as the 58th eclipse occurred on September 7th, 2025 shortly before the Olympiad) are accepted as correct, provided the interpretation is stated explicitly.
https://ssd.jpl.nasa.gov/horizons/app.html
Source note. The printed summer-eclipse threshold substitutes and reports approximately . That numerical expression evaluates to ; the source expression and stated result are both retained. Appendix A also labels the greatest-eclipse time as UTC, whereas the accompanying workbook labels that column TT. The printed code is reproduced without a claim that it executes successfully.
A Analysis of Eclipse Visibility with AstroPy
"""
Analysis of Lunar Eclipse Visibility
====================================
This script reads a catalog of 21st century lunar eclipses from
‘eclipses.xlsx‘, extracts the times of totality, and determines
which eclipses are visible from:
- Cape Fligely
- Point Xi on the equator
Visibility is defined as the Moon’s upper limb being above the
geometric horizon, corrected for refraction and the Moon’s
radius.
"""
import pandas as pd
import numpy as np
import astropy.units as u
from astropy.time import Time, TimeDelta
from astropy.coordinates import EarthLocation, AltAz, get_body
# ----------------------------------------------------------------------
# Load and preprocess the eclipse catalog
# ----------------------------------------------------------------------
def load_eclipses(path: str = "eclipses.xlsx") -> pd.DataFrame:
"""
Load the lunar eclipse catalog from Excel and standardize columns.
Parameters
----------
path : str
Path to the Excel file.
Returns
-------
df : pandas.DataFrame
DataFrame with standardized columns and auxiliary fields.
"""
df = pd.read_excel(path, skiprows=1)
df = df.rename(columns={
"Unnamed: 0": "num",
"U1": "U1", "U2": "U2", "U3": "U3", "U4": "U4",
"Unnamed: 10": "maxt"
})
months = {m: i for i, m in enumerate(
["January","February","March","April","May","June",
"July","August","September","October","November","December"], 1)}
df["Month_num"] = df["Month"].map(months)
df["date"] = pd.to_datetime(
dict(year=df["Year"], month=df["Month_num"], day=df["Day"]),
errors="coerce"
)
def frac_to_time(frac):
if pd.isna(frac):
return np.nan
seconds = float(frac) * 24 * 3600
h = int(seconds // 3600)
m = int((seconds % 3600) // 60)
s = int(seconds % 60)
return f"{h:02d}:{m:02d}:{s:02d}"
df["maxt_str"] = df["maxt"].apply(frac_to_time)
return df
# ----------------------------------------------------------------------
# Convert tabulated times into astropy.Time arrays
# ----------------------------------------------------------------------
def build_times(df: pd.DataFrame):
"""
Construct astropy.Time objects for total eclipses only.
Returns
-------
df_tot : pandas.DataFrame
Subset containing only total eclipses (U2 and U3 defined).
t2, t3, tmax : astropy.Time
Times of second contact, third contact, and maximum eclipse.
"""
df_tot = df[df["U2"].notna() & df["U3"].notna()].copy()
def to_iso(dates, times):
iso_list = []
for d, t in zip(dates, times):
if pd.isna(t) or pd.isna(d):
iso_list.append("NaT")
else:
iso_list.append(f"{d.strftime(’%Y-%m-%d’)}T{t}")
return np.array(iso_list, dtype=str)
iso_u2 = to_iso(df_tot["date"], df_tot["U2"])
iso_u3 = to_iso(df_tot["date"], df_tot["U3"])
iso_max = to_iso(df_tot["date"], df_tot["maxt_str"])
t2 = Time(iso_u2, format="isot", scale="utc", out_subfmt="date_hms")
t3 = Time(iso_u3, format="isot", scale="utc", out_subfmt="date_hms")
tmax = Time(iso_max, format="isot", scale="utc", out_subfmt="date_hms")
# adjust for midnight crossings
one_day = TimeDelta(1*u.day)
t3[tmax > t3] = t3[tmax > t3] + one_day
t2[tmax < t2] = t2[tmax < t2] - one_day
return df_tot, t2, t3, tmax
# ----------------------------------------------------------------------
# Visibility criterion
# ----------------------------------------------------------------------
def visible_mask_for_site(t2, t3, lat_deg, lon_deg=59 + 14/60, height_m=0,
n_samples=11, h_thresh_deg=-(35+16)/60.0):
"""
Check eclipse visibility over the full totality interval [U2, U3]
Samples each eclipse at ‘n_samples‘ evenly spaced times
and returns True if the Moons center altitude exceeds ‘h_thresh_deg‘
Parameters
----------
t2, t3 : astropy.Time
Start and end of totality.
lat_deg, lon_deg : float
Geographic coordinates of the site (degrees).
height_m : float
Elevation above sea level.
n_samples : int, optional
Number of samples per eclipse (inclusive of endpoints), default 11.
h_thresh_deg : float, optional
Altitude threshold (degrees) for the Moons center.
Returns
-------
mask : ndarray of bool
True if any sample during totality is above the threshold
(i.e., visible).
"""
loc = EarthLocation(
lat=lat_deg*u.deg,
lon=lon_deg*u.deg,
height=height_m*u.m
)
frac = np.linspace(0.0, 1.0, n_samples)
dt = t3 - t2
t_grid = t2[:, None] + frac[None, :] * dt[:, None]
alt = get_body("moon", t_grid.reshape(-1), location=loc)\
.transform_to(AltAz(obstime=t_grid.reshape(-1), location=loc))\
.alt.deg.reshape(len(t2), n_samples)
return (alt > h_thresh_deg).any(axis=1)
# ----------------------------------------------------------------------
# Main pipeline
# ----------------------------------------------------------------------
def analyze_visibility(path="eclipses.xlsx"):
"""
Analyze visibility of total lunar eclipses from Cape Fligely
and point Xi.
"""
df = load_eclipses(path)
df_tot, t2, t3, tmax = build_times(df)
events = df_tot["num"].to_numpy()
# two sites
vis_XI = visible_mask_for_site(t2, t3, lat_deg=0.0)
vis_FL = visible_mask_for_site(t2, t3, lat_deg=81 + 51/60.0)
xi_list = events[vis_XI].tolist()
fl_list = events[vis_FL].tolist()
both = sorted(set(xi_list) & set(fl_list))
print("Total eclipses:", len(events))
print("Visible from point Xi:", len(xi_list))
print("Visible from Cape Fligely:", len(fl_list))
print("Visible from both:", len(both))
return xi_list, fl_list, both
# ----------------------------------------------------------------------
# Entry point
# ----------------------------------------------------------------------
if __name__ == "__main__":
xi_list, fl_list, both = analyze_visibility("eclipses.xlsx")Константи
Universal
- Gravitational constant
- Speed of light
Astronomical
- Astronomical unit
- Parsec
- Hubble constant
Emission constants
- Stefan–Boltzmann
- Wien’s displacement
Earth
- Radius
- Obliquity of ecliptic
- Orbital period
Sun
- Radius
- Mass
- Absolute magnitude (bol.)
- Effective temperature
- Luminosity
Оригинал в Архива: OWAO_2025_Practical_Problems.pdf · решение от архива: OWAO_2025_Practical_Solutions.pdf