Python i Księżyc
-
jacek
25/08/2016
- Programowanie
- 2876 czytań 0 komentarzy
Biblioteka Pythona PyEphem zawiera gotowe funkcję do wykonania obliczeń astronomicznych dla różnych ciał niebieskich z wyjątkiem Ziemi, tzn. nie będziemy mogli wywołać jakiejś funkcji programu by nam obliczyła jakieś dane (np. tranzyt, czy wschód) dla planety Ziemia.
Na początek kod programu:
Dla uproszczenia wskazaliśmy datę względem której program wylicza nam najbliższe fazy Księżyca. Tu jest to: 2016/8/25 00:00:00. Ale oczywiście możemy zmodyfikować go tak, by pobierał kolejne miesiące lunarne, lub prościej kolejne fazy pełni, nowiu, pierwszej czy ostatniej kwadry. Musimy tylko zdefiniować odpowiednią pętlę. Na razie zostawiamy to do zrobienia czytelnikowi.
Do wyznaczenia fazy Księżyca posłużyła nam funkcja previous_full_moon() i jej pochodne czyli previous_new_moon(), previous_first_quarter_moon(), next_last_quarter_moon(). Oprócz daty fazy Księżyca wyznaczamy w naszym programie jej datę Juliańską. Do tego celu potrzebujemy tylko wywołania funkcji julian_date(). Przypomnijmy jak wyglądało liczenie JD:
Oto nasz kod liczący dla kolejnych 20 miesięcy synodycznych kolejne fazy Księżyca. Dodaliśmy w niej pętlę for ... in range () jej parametrem jest wartość zak podająca ile razy ma być wykonana pętla.
Za pomocą biblioteki PyEphem można dużo więcej.
Przeczytaj więcej:
Na początek kod programu:
# -*- coding : ISO-1250 -*- #wyznaczanie faz Księżyca # IMPORTOWANIE import ephem as ep # czas ts = ep.Date("2016/8/25 00:00:00") #Fazy Księzyca d0 = ep.previous_new_moon(ts) #nowy - młody Księżyc - nów d1 = ep.previous_first_quarter_moon(ts) #pierwsza kwadra d2 = ep.previous_full_moon(ts) #pełnia d3 = ep.next_last_quarter_moon(ts)# ostatnia kwadra print('%28s %22s %14s' % ('Faza Księżyca','Data','JD')) fmt = '%38s %18s %f' print(fmt % ("Ostatnia nowy Księżyc: ",d0,ep.julian_date(d0))) print(fmt % ("Ostatnia pierwsza kwadra Księżyca: ",d1,ep.julian_date(d1))) print(fmt % ("Ostatnia pełnia Księżyca: ",d2,ep.julian_date(d2))) print(fmt % ("Ostatnia kwadra Księżyca: ",d3,ep.julian_date(d3)))Po szczegóły programowania w Pythonie odsyłam do samouczków jakie prezentowaliśmy we wcześniejszych artykułach. My zajmiemy się tu jedynie czystym kodowaniem z wykorzystaniem PyEphem.
Dla uproszczenia wskazaliśmy datę względem której program wylicza nam najbliższe fazy Księżyca. Tu jest to: 2016/8/25 00:00:00. Ale oczywiście możemy zmodyfikować go tak, by pobierał kolejne miesiące lunarne, lub prościej kolejne fazy pełni, nowiu, pierwszej czy ostatniej kwadry. Musimy tylko zdefiniować odpowiednią pętlę. Na razie zostawiamy to do zrobienia czytelnikowi.
Do wyznaczenia fazy Księżyca posłużyła nam funkcja previous_full_moon() i jej pochodne czyli previous_new_moon(), previous_first_quarter_moon(), next_last_quarter_moon(). Oprócz daty fazy Księżyca wyznaczamy w naszym programie jej datę Juliańską. Do tego celu potrzebujemy tylko wywołania funkcji julian_date(). Przypomnijmy jak wyglądało liczenie JD:
#------------------------------------------------------------------------------- # Name: data julianska alg. z WikiPedii # Purpose: python 3.x # # Author: astronom # # Created: 17-10-2014 # Copyright: (c) astronom 2014 # Licence: Jacek Patka Sekcja Astronomiczna # Gwiezdne Wrota w Zaganiu #------------------------------------------------------------------------------- # -*- coding: UTF-8 -*- # Dane do obliczeń R=2004 #rok M=1 #miesiąc D=1 # dzień # obliczenia X = int((M + 9) / 12) A = 4716 + R + X Y = int(275 * M / 9) V = int(7 * A / 4) B = 1729279.5 + 367 * R + Y - V + D Q = int((A + 83) / 100) C = Q W = int(3 * (C + 1) / 4) E = W JD = B + 38 - E # wyświetlanie wyniku print ('JD:',JD)
Oto nasz kod liczący dla kolejnych 20 miesięcy synodycznych kolejne fazy Księżyca. Dodaliśmy w niej pętlę for ... in range () jej parametrem jest wartość zak podająca ile razy ma być wykonana pętla.
# -*- coding : ISO-1250 -*- #wyznaczanie faz Księżyca # IMPORTOWANIE import ephem as ep # czas ts = ep.Date("2016/8/25 00:00:00") # zakres obliczeń - na ile miesięcy synodycznych # mają być zrobione obliczenia zak = 20 #Fazy Księzyca d0 = ep.previous_new_moon(ts) #nowy - młody Księzyc d1 = ep.previous_first_quarter_moon(ts) #pierwsza kwadra d2 = ep.previous_full_moon(ts) #pełnia d3 = ep.next_last_quarter_moon(ts)# ostatnia kwadra print('%18s %22s %14s' % ('Faza Księżyca','Data','JD')) fmt = '%28s %18s %f' print(fmt % ("Ostatni nów: ",d0,ep.julian_date(d0))) for i in range (zak): print(fmt % ("Kolejny nów: ",ep.next_new_moon(d0),ep.julian_date(d0))) d0 = ep.next_new_moon(d0) print("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") print(fmt % ("Ostatnia I kwadra: ",d1,ep.julian_date(d1))) for i in range (zak): print(fmt % ("Kolejna I kwadra: ",ep.next_new_moon(d1),ep.julian_date(d1))) d1 = ep.next_new_moon(d1) print("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") print(fmt % ("Ostatnia pełnia: ",d2,ep.julian_date(d2))) for i in range (zak): print(fmt % ("Kolejna pełnia: ",ep.next_new_moon(d2),ep.julian_date(d2))) d0 = ep.next_new_moon(d2) print("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") print(fmt % ("Ostatnia kwadra: ",d3,ep.julian_date(d3))) for i in range (zak): print(fmt % ("Kolejna ost. kwadra: ",ep.next_new_moon(d3),ep.julian_date(d3))) d0 = ep.next_new_moon(d3)
Za pomocą biblioteki PyEphem można dużo więcej.
Przeczytaj więcej:
Dodaj komentarz
Zaloguj się, aby móc dodać komentarz.
Oceny
Tylko zarejestrowani użytkownicy mogą oceniać zawartość strony
Zaloguj się , żeby móc zagłosować.
Zaloguj się , żeby móc zagłosować.
Brak ocen. Może czas dodać swoją?