Skocz do zawartości

Algorytmy astronomiczne czyli Python w rachunkach astro. - Cz. VI GHA Aries (dokładne) i zamiana współrzednych.


Wiesiek1952

Rekomendowane odpowiedzi

 

Poniżej dwie funkcje (używają/wywołują funkcje z poprzednich odcinków):

 

gha_aries() wylicza GHA punktu Barana z dokładnością lepszą od 0.05' (ok 3" kątowe) i powinna utrzymać tą dokładność dla dat na 1000 lat do przodu (Meeus pisze nawet o 6000).

 

ecliptical_to_equatorial() - pozwala na zamianę współrzędnych z ekliptycznych na równikowe. W większości przypadków efemerydy ciał niebieskich (CN) liczone są we współrzędnych ekliptycznych (bo łatwiej) i na koniec zamieniane są na współrzędne równikowe czyli rektascencję i deklinację. Zwraca wartości sun_efemeries schowane w tejże klasie ale może być wykorzystana dla innych CN jeśli na wejściu wstawimy dowolne inne CN w body_position.

 

Dodatkowo poprawka/uzupełnienie definicji klas. Wszystkie klasy używane dotychczas i w przewidywanych kolejnych odcinkach w drugim "okienku"

 

 

 

# ******************************************************************************************

def gha_aries(current_day: day_in_calendar, current_time: present_time) -> float:
    gha = sideral_time(current_day, current_time)
    nut = nutation(current_day, current_time)
    obliq = ecliptic_obliquity(current_day, current_time) + nut.latitude
    gha += nut.longitude * math.cos(obliq)

    return gha


# ******************************************************************************************

def ecliptical_to_equatorial(current_date: day_in_calendar, current_time: present_time,
                             body_position: sun_efemeries) -> sun_efemeries:
    final_position = sun_efemeries()
    body_declination = body_position.declination
    body_longitude = body_position.sha
    nutacja = nutation(current_date, current_time)
    epsilon = ecliptic_obliquity(current_date, current_time) + nutacja.latitude

    alfa = math.atan2((math.sin(body_longitude) * math.cos(epsilon)
                  - math.tan(body_declination * math.sin(epsilon))),
                 math.cos(body_longitude))
    while alfa < 0:
        alfa += TWO_PI
    while alfa > TWO_PI:
        alfa -= TWO_PI

    declinacja = math.sin(body_declination) * math.cos(epsilon)
    declinacja += math.cos(body_declination) * math.sin(epsilon) * math.sin(body_longitude)
    declinacja = math.asin(declinacja)
    sha = -alfa + gha_aries(current_date, current_time)
    while sha < 0:
        sha += TWO_PI
    while sha > TWO_PI:
        sha -= TWO_PI

    final_position.sha = sha
    final_position.declination = declinacja
    final_position.semi_diameter = body_position.semi_diameter
    return final_position
# ******************************************************************************************

 

 

 

 

class GeoPoint:
    def __init__(self, latitude: float = 0.0, longitude: float = 0.0) -> object:
        self.latitude = latitude
        self.longitude = longitude


class GeoPointPolar:
    def __init__(self, direction: float = 0.0, distance: float = 0.0):
        self.direction = direction
        self.distance = distance

class day_in_calendar:
    def __init__(self, year: int = 0, month: int = 0, day: float = 0):
        self.year = year
        self.month = month
        self.day = day


class present_time:
    def __init__(self, hour: int = 0, minute: int = 0, seconds: float = 0):
        self.hour = hour
        self.minute = minute
        self.seconds = seconds

class sun_efemeries:
    def __init__(self, sha: float = 0, declination: float = 0, semi_diameter: float = 0):
        self.sha = sha
        self.declination = declination
        self.semi_diameter = semi_diameter

class star_ephemeries:
    def __init__(self, rektascencja: float = 0.0, deklinacja: float = 0.0, nazwa: str =''):
        self.nazwa = nazwa
        self.rektascencja = rektascencja
        self.deklinacja = deklinacja


class moon_ephemeries:
    def __init__(self, rektascencja: float = 0.0, deklinacja: float = 0.0, paralaksa: float = 0, sd: float = 0):
        self.rektascencja = rektascencja
        self.deklinacja = deklinacja
        self.paralaksa = paralaksa
        self.sd = sd


# ******************************************************************************************
Odnośnik do komentarza
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.