Luku 3
Kuunpimennysten etsiminen
Tutkitaan seuraavaksi kuunpimennyksiä, jotka syntyvät vastaavasti kuin auringonpimennykset, mutta täydenkuun aikaan. Täysikuu tapahtuu joka kuukausi, mutta taaskaan jokainen täysikuu ei pimenny.
Katsotaan, missä täysikuu kulkee huonona ja hyvänä kuukautena.
Täydenkuun reitti tähtitaivaalla maapallon varjon ohitse loka- ja joulukuussa 2028. Lokakuun täysikuu tapahtuu, kun Kuun rata on kallistunut maksimiinsa Auringon (ja Auringon vastapuolen) suunnissa. Kuu ohittaa Maan varjon lähes viiden asteen päästä. Joulukuun täysikuu näkyy ratatasojen solmupisteen suunnassa. Kuunpimennys voi syntyä silloin, kun Maan varjo on täydenkuun hetkellä riittävän lähellä solmua. Geosentrinen näkymä.
Kuvassa 1.1 Aurinko kulkee tähtitaivasta vasten, mutta tähtiä (tai hyvin kapeaa Kuuta) ei tietenkään voi nähdä päivätaivaalla. On käytettävä mielikuvitusta.
Kuva 3.1 yllä esittää yötaivasta, joten tähtien ja Kuun liike on havaittavissa. Vastaavasti Maan varjoa ei kuitenkaan voi nähdä yötaivaalla, vaan se ilmestyy näkyviin vasta sen aiheuttaessa kuunpimennyksen.
3.1 Paikat ja etäisyydet
Luvun 1 löydökset toimivat kuunpimennyksille sellaisenaan. Paikkojen laskemisessa tarvitsisi vain vaihtaa Auringon suunnan sijasta anti-auringon eli Maan varjon suunnaksi (vastapäinen piste taivaanpallolla). Mutta itse asiassa tätäkään ei tarvitse tehdä.
Riittää, että etsitään täydenkuun ajankohdat ja Kuun ekliptinen leveysaste noilla hetkillä, niin :n laskenta toimii sellaisenaan. Lasketaan esimerkin vuoksi pienin kulmaetäisyys kuvan 3.1 tapauksille.
Koodi pienimmän kulmaetäisyyden laskemiseen
from numpy import arctan, cos
from skyfield import almanac
from skyfield.api import load
from skyfield.framelib import ecliptic_frame
ts = load.timescale()
eph = load('de440s.bsp')
earth, sun, moon = eph['earth'], eph['sun'], eph['moon']
def lonlat(body, ti):
lat, lon, _ = earth.at(ti).observe(body).apparent().frame_latlon(ecliptic_frame)
return lon.degrees, lat.degrees
def wrap(d):
return (d + 180) % 360 - 180
for y, m, d in [(2028, 10, 3), (2028, 12, 31)]:
t, phase = almanac.find_discrete(ts.utc(y, m, d - 1), ts.utc(y, m, d + 1),
almanac.moon_phases(eph))
ti = t[phase == 2][0] # the full moon itself
a, b = ts.tt_jd(ti.tt - 1 / 1440), ts.tt_jd(ti.tt + 1 / 1440)
ml_a, mb_a = lonlat(moon, a)
ml_b, mb_b = lonlat(moon, b)
sl_a, _ = lonlat(sun, a)
sl_b, _ = lonlat(sun, b)
beta = lonlat(moon, ti)[1]
lam = wrap(ml_b - ml_a) / wrap(sl_b - sl_a)
tan_I = (mb_b - mb_a) / wrap(ml_b - ml_a)
I_ = arctan(lam / (lam - 1) * tan_I)
sigma = abs(beta) * cos(I_)
print(f"{ti.utc_strftime('%Y-%m-%d %H:%M')} - {sigma:.3f}") 2028-10-03 16:25 - 4.939
2028-12-31 16:49 - 0.315
Näköjään joulukuussa tapahtuu kuunpimennys. Mutta luvussa 2 lasketut raja-arvot eivät päde. Mikä on kulmaraja kuunpimennyksen näkymiselle?
3.2 Kuunpimennyksen raja-arvot
Seuraavan kulmaharjoituksen matematiikka on hyvin samanlaista kuin auringonpimennyksillä. Tarjolla on sekä helpotuksia että myös hankaluuksia. Laskentaa helpottaa se, ettei havaitsijan paikka vaikuta pimennyksen syntyyn: Kuu joko pimenee tai sitten ei.
Hankaluutta aiheuttaa ainakin kaksi asiaa. Maapallo ei ole pallo, ja sitä ympäröi ilmakehä.
Aloitetaan katsomalla Maan puolivarjoa. Alkuperäiset laskelmat, ks. Explanatory Supplement luku 11.2.3.
Maapallon puolivarjon geometria.
Kuvassa 3.2 piste on avaruudessa puolivarjon reunalla Kuun etäisyydellä. Haluamamme suure on puolivarjon kulmaläpimitan puolikas Maasta katsottuna.
Pienellä kolmiojumpalla ulkokulmista saadaan
missä ja ovat Kuun ja Auringon parallaksit ja Auringon näennäinen säde.Tarkka lukija huomaa, että parallaksit eivät ole aivan edellisen luvun määritelmiä vastaavia. on Auringon reunalla eikä keskipisteessä. Tästä aiheutuva virhe on 0.00001 kaarisekuntia. Lisäksi piste on todellisuudessa hieman kauempana kuin Kuun etäisyys. Oikea Kuun etäisyys täsmäisi pisteen kautta kulkevaan tasoon varjon akselin keskellä. Tästä aiheutuva virhe on noin 0.8 kaarisekuntia. Pian saamme huomata tämän kokoisten virheiden olevan kuunpimennyksissä melko mitättömiä.
Maapallon täysvarjon geometria.
Kuva 3.3 on sama tilanne täysvarjolle, jonka kulmaläpimitan puolikkaaksi saadaan
Sitten ensimmäinen riesa. Maapallo ei ole pallo, vaan litistynyt ellipsoidi. Ellipsoidin varjon laskeminen eri asennoissa olisi kammottava homma. Tilanteen voi pelastaa käyttämällä laskuissa maapallon ekvatoriaalisen säteen tilalla keskimääräistä sädettä 45 asteen leveyspiirin kohdalla. Tämä voidaan tehdä käyttämällä parallaksin asemesta
Toinen riesa. Jo kauan sitten on huomattu näiden geometristen laskelmien poikkeavan havaituista pimennysten ajankohdista jonkin verran. Maan varjo näyttääkin olevan isompi kuin laskelmat antaisivat ymmärtää. Syynä on maapallon ilmakehä. Kuinka paljon isompi? Prosentin, viisi prosenttia? Sanotaan kaksi prosenttia. Siispä
Siis ihan oikeasti. Nämä kertoimet eivät ole laskettuja vaan kokeellisesti määritettyjä. Philippe de La Hire huomasi jo 1707, että laskettua varjon sädettä on kasvatettava noin 1/41:llä, jotta se sopisi havaittuihin kontaktihetkiin. Myöhemmin ehdotettiin 1/40 (Lambert) ja 1/60 (Mayer), ja Beer ja Mädler päätyivät vuoden 1833 pimennyksestä lukuun 1/50. Chauvenet vakiinnutti sen 1891, ja siitä tuli efemeridijulkaisujen käytäntö. Danjon huomautti 1951, että suhteellista korjausta yritetään tehdä väärässä kohdassa. Jos ilmakehä toimii kuin läpinäkymätön kuori, sen kuuluu kasvattaa Maan sädettä eikä varjoja. Kerroksen paksuudeksi hän arvioi noin 75 km eli 1/85 Maan säteestä, jolloin varjot jäävät hieman pienemmiksi. Ero korjaamattomiin ennusteisiin on havaittavissa, mutta keskenään eri korjausten välillä on haastavaa nähdä eroja, varsinkin kun täysvarjon reuna on todellisuudessa pehmeä ja epätarkka. Puolivarjon ulkoreuna on niin mitätön, ettei korjauksilla ole minkäänlaista käytännön vaikutusta. Pitkissä, vuosisatojen mittaisissa pimennystaulukoissa muutamat pimennykset saattavat muuttua täydellisistä osittaisiksi. Astronomical Almanac ja Explanatory Supplement (ja tämä sivusto) pitäytyvät 1/50:ssä, kun taas Espenakin kaanonit ja Connaissance des Temps käyttävät Danjonin tapaa. Kattavaa käsittelyä varten katso Espenak: Enlargement of Earth's Shadows.
Geosentriset rajaehdot kuunpimennyksen tapahtumiselle on nyt helppo määritellä.
Kuunpimennyksen kolme raja-arvoa: täydellinen (), osittainen () ja puolivarjopimennys ().
Puolivarjopimennys tapahtuu, kun Kuun ja varjon keskipisteiden kulmaetäisyys , osittaiselle raja on , täydelliselle .
Yhteenvetona kolmeksi ehdoksi saadaan
3.3 Käytännön esimerkki
Etsitään nyt kuunpimennykset vuonna 2028.
Koodi kuunpimennysten raja-arvojen laskemiseen
from numpy import arctan, cos, degrees
from skyfield import almanac
from skyfield.api import load
from skyfield.framelib import ecliptic_frame
R_EARTH = 6378.1366 # km, IAU equatorial radius
R_SUN = 696000.0
R_MOON = 0.2725076 * R_EARTH # Moon/Earth radius ratio, IAU
ts = load.timescale()
eph = load('de440s.bsp')
earth, sun, moon = eph['earth'], eph['sun'], eph['moon']
t0, t1 = ts.utc(2028, 1, 1), ts.utc(2029, 1, 1)
t, phase = almanac.find_discrete(t0, t1, almanac.moon_phases(eph))
def lonlat(body, ti):
lat, lon, _ = earth.at(ti).observe(body).apparent().frame_latlon(ecliptic_frame)
return lon.degrees, lat.degrees
def wrap(d):
return (d + 180) % 360 - 180
for ti in t[phase == 2]: # every full moon of the year
a, b = ts.tt_jd(ti.tt - 1 / 1440), ts.tt_jd(ti.tt + 1 / 1440)
ml_a, mb_a = lonlat(moon, a)
ml_b, mb_b = lonlat(moon, b)
sl_a, _ = lonlat(sun, a)
sl_b, _ = lonlat(sun, b)
beta = lonlat(moon, ti)[1]
lam = wrap(ml_b - ml_a) / wrap(sl_b - sl_a)
tan_I = (mb_b - mb_a) / wrap(ml_b - ml_a)
I_ = arctan(lam / (lam - 1) * tan_I)
sigma = abs(beta) * cos(I_)
e = earth.at(ti)
d_sun = e.observe(sun).apparent().distance().km
d_moon = e.observe(moon).apparent().distance().km
s_s = degrees(R_SUN / d_sun)
s_m = degrees(R_MOON / d_moon)
pi_s = degrees(R_EARTH / d_sun)
pi_1 = 0.998340 * degrees(R_EARTH / d_moon) # the 45-degree radius
f_1 = 1.02 * (pi_1 + pi_s + s_s)
f_2 = 1.02 * (pi_1 + pi_s - s_s)
if sigma < f_2 - s_m: # tightest limit first, or a
verdict = 'total' # total would report as partial
elif sigma < f_2 + s_m:
verdict = 'partial'
elif sigma < f_1 + s_m:
verdict = 'penumbral'
else:
verdict = '-'
print(f"{ti.utc_strftime('%Y-%m-%d %H:%M')} {sigma:6.3f}"
f" {f_1 + s_m:6.3f} {f_2 + s_m:6.3f} {f_2 - s_m:6.3f} {verdict}") | täysikuu | puolivarjon raja | osittaisen raja | täydellisen raja | tulos | |
|---|---|---|---|---|---|
| 2028-01-12 04:03 | 0.996 | 1.588 | 1.035 | 0.483 | osittainen |
| 2028-02-10 15:04 | 1.717 | 1.600 | 1.049 | 0.491 | — |
| 2028-03-11 01:06 | 3.905 | 1.594 | 1.046 | 0.490 | — |
| 2028-04-09 10:27 | 4.956 | 1.570 | 1.027 | 0.480 | — |
| 2028-05-08 19:49 | 4.632 | 1.537 | 0.998 | 0.464 | — |
| 2028-06-07 06:09 | 3.080 | 1.500 | 0.964 | 0.445 | — |
| 2028-07-06 18:11 | 0.733 | 1.467 | 0.932 | 0.427 | osittainen |
| 2028-08-05 08:10 | 1.810 | 1.444 | 0.908 | 0.412 | — |
| 2028-09-03 23:48 | 3.895 | 1.434 | 0.894 | 0.404 | — |
| 2028-10-03 16:25 | 4.939 | 1.439 | 0.895 | 0.403 | — |
| 2028-11-02 09:17 | 4.587 | 1.459 | 0.910 | 0.411 | — |
| 2028-12-02 01:40 | 2.886 | 1.490 | 0.939 | 0.427 | — |
| 2028-12-31 16:49 | 0.315 | 1.528 | 0.975 | 0.448 | täydellinen |
Toistetaan lasku vielä vuodelle 2027 puolivarjopimennysten löytämiseksi.
| täysikuu | puolivarjon raja | osittaisen raja | täydellisen raja | tulos | |
|---|---|---|---|---|---|
| 2027-01-22 12:17 | 1.651 | 1.598 | 1.045 | 0.488 | — |
| 2027-02-20 23:24 | 1.054 | 1.576 | 1.026 | 0.478 | puolivarjo |
| 2027-03-22 10:44 | 3.425 | 1.542 | 0.996 | 0.461 | — |
| 2027-04-20 22:27 | 4.803 | 1.503 | 0.962 | 0.443 | — |
| 2027-05-20 10:59 | 4.853 | 1.469 | 0.931 | 0.426 | — |
| 2027-06-19 00:44 | 3.609 | 1.444 | 0.908 | 0.413 | — |
| 2027-07-18 15:45 | 1.418 | 1.432 | 0.897 | 0.406 | puolivarjo |
| 2027-08-17 07:29 | 1.154 | 1.436 | 0.898 | 0.407 | puolivarjo |
| 2027-09-15 23:04 | 3.443 | 1.454 | 0.913 | 0.415 | — |
| 2027-10-15 13:47 | 4.811 | 1.485 | 0.940 | 0.429 | — |
| 2027-11-14 03:26 | 4.823 | 1.523 | 0.973 | 0.447 | — |
| 2027-12-13 16:09 | 3.420 | 1.560 | 1.008 | 0.467 | — |
Heinäkuun pimennyksessä kulmaetäisyys on 1.418° ja puolivarjopimennyksen raja 1.432°. Ero on 0.014° eli 50 kaarisekuntia. Vielä tätä vähemmän säväyttävää pimennystä saanee odottaa aika pitkään. Merkatkaa kalenteriin!
3.4 Erityinen puolivarjopimennys
Entäpä, jos kuvan 3.4 tapaus toimisi toisenlaisena raja-arvona: Kuinka usein Kuu mahtaa olla kokonaan puolivarjossa, muttei lainkaan täysvarjossa? Näin voi tapahtua, kun
Täydellinen puolivarjopimennys: Kuu mahtuu kokonaan puolivarjon sisään koskettamatta täysvarjoa.
Etsitään muutama seuraava täydellinen puolivarjopimennys.
Koodi täydellisten puolivarjopimennysten etsimiseen
from numpy import arctan, cos, degrees
from skyfield import almanac
from skyfield.api import load
from skyfield.framelib import ecliptic_frame
R_EARTH = 6378.1366 # km, IAU equatorial radius
R_SUN = 696000.0
R_MOON = 0.2725076 * R_EARTH # Moon/Earth radius ratio, IAU
ts = load.timescale()
eph = load('de440s.bsp')
earth, sun, moon = eph['earth'], eph['sun'], eph['moon']
def lonlat(body, ti):
lat, lon, _ = earth.at(ti).observe(body).apparent().frame_latlon(ecliptic_frame)
return lon.degrees, lat.degrees
def wrap(d):
return (d + 180) % 360 - 180
found = 0
year = 2027
while found < 3: # one year at a time, until three
t, phase = almanac.find_discrete(ts.utc(year, 1, 1), ts.utc(year + 1, 1, 1),
almanac.moon_phases(eph))
for ti in t[phase == 2]:
a, b = ts.tt_jd(ti.tt - 1 / 1440), ts.tt_jd(ti.tt + 1 / 1440)
ml_a, mb_a = lonlat(moon, a)
ml_b, mb_b = lonlat(moon, b)
sl_a, _ = lonlat(sun, a)
sl_b, _ = lonlat(sun, b)
beta = lonlat(moon, ti)[1]
lam = wrap(ml_b - ml_a) / wrap(sl_b - sl_a)
tan_I = (mb_b - mb_a) / wrap(ml_b - ml_a)
I_ = arctan(lam / (lam - 1) * tan_I)
sigma = abs(beta) * cos(I_)
e = earth.at(ti)
d_sun = e.observe(sun).apparent().distance().km
d_moon = e.observe(moon).apparent().distance().km
s_s = degrees(R_SUN / d_sun)
s_m = degrees(R_MOON / d_moon)
pi_s = degrees(R_EARTH / d_sun)
pi_1 = 0.998340 * degrees(R_EARTH / d_moon)
f_1 = 1.02 * (pi_1 + pi_s + s_s)
f_2 = 1.02 * (pi_1 + pi_s - s_s)
if f_2 + s_m < sigma < f_1 - s_m: # inside the penumbra, clear of the umbra
print(ti.utc_strftime('%Y-%m-%d %H:%M'))
found += 1
if found == 3:
break
year += 1 2053-08-29 07:53
2066-12-31 14:42
2070-04-25 09:32
Näitä joutuu odottelemaan hetken. Parasta merkata nämäkin kalenteriin, etteivät vain menisi ohi.
Lisää tietoa, ks. Meeus (1980). Huomaa, että tämän lähteen lista on erilainen ja 2066 puuttuu. Ero selittyy ylempänä käsitellyillä eroilla varjojen kasvattamiseen valituissa prosenteissa.