Skocz do zawartości

Obliczanie godziny gdy słońce osiągnie wysokość x


bloo

Rekomendowane odpowiedzi

Witam.

 

Potrzebuję napisać dla własnych potrzeb skrypt obliczający godzinę gdy słońce osiągnie konkretną wysokość nad horyzontem.

Tj, wprowadzam współrzędne geograficzne, datę i wysokość słońca a skrypt ma wypluć godzinę (i minutę, może być jako ułamek godziny), gdy słońce osiągnie zadaną wysokość.

 

Znalazłem coś takiego:

http://williams.best.vwh.net/sunrise_sunset_algorithm.htm

Przykład skryptu obliczającego godzinę wschodu i zachodu. Niestety bakuje mi wiedzy astronomicznej i gubię się w tych wszystkich deklinacjach, rektascencjach...

Jak zmodyfikować taki skrypt, żeby mógł obliczyć moment dowolnej zadanej wysokości, a nie tylko wschodu i zachodu?

 

 

P.S.

Zapobiegawczo napiszę, że nie urządzają mnie niestety programy cartes du ciel, bo potrzebuję mieć możliwość dalszego "obrabiania" obliczonych wartości :)

Odnośnik do komentarza
Udostępnij na innych stronach

z opisu wynika że wystarczy podać odpowiednią wartość "zenith"

skoro 90 stopni oznacza wschód/zachód (pozycja na horyzoncie) a wartości większe oznaczają coraz niższe położenie słońca pod horyzontem, to podając wartość zenith=90-wysokość dostaniesz czas w którym słońce osiąga "wysokość".

 

chyba :)

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli masz taką możliwość, to zajrzyj sobie do książki "Astronomia w Geografii" Mietelskiego albo "Astronomia Ogólna" Rybki. Powiem tylko, że jak pisałem własny skrypt na te zjawiska (jakieś 4 lata temu), to też posiłkowałem się tym, co podlinkowałeś. Niestety, ale bez zrozumienia takich pojęć jak deklinacja i rektascensja, które są jakby nie patrzeć podstawami, które należy znać przy tego typu zadaniach, to nic z tego nie wyjdzie.

Odnośnik do komentarza
Udostępnij na innych stronach

gubię się w tych wszystkich deklinacjach, rektascencjach...

 

Nie chcę Cię dołować ale gdy nie znasz tych (postawowych niestety) pojęć, trudno będzie Ci wytłumaczyć jak zmodyfikować skrypt, a w zasadzie napisać go od nowa.

Owszem, można by podać gotowy wzór (a właściwie całą ich serię) gdzie otrzymasz w wyniku moment gdy Słońce osiągnie daną wysokość nad horyzontem, ale wybacz to jest naprawdę dużo pisaniny a mało kto ma na to czas.

 

Praktycznie wszelkie potrzebne wzory znajdziesz w rozdziałach 7, 9, 11, 12 i 24 książki Astronomical Algorithms Jeana Meeusa (wydanie z 1991 roku, ISBN 0-943396-35-2, w innych wydaniach rozdziały mogą być inne) ale i tu bez podstawowej choćby wiedzy astronomicznej raczej nie dasz rady.

Odnośnik do komentarza
Udostępnij na innych stronach

Majer, szuu dzięki.

 

Rozumiem, że podmiana h na poszukiwaną wysokość powinna załatwić sprawę? :)

 

Teraz tak: nadal potrzebuję Rektascencji w tym wzorze:

UT_Sun_in_south = ( RA - GMST0 - long ) / 15.0

Skoro

"When we've decided on some value for the altitude above the horizon, we start by computing the Sun's RA at noon local time. "

to czy mogę skorzystać z tych obliczeń:

1. first calculate the day of the year

 

N1 = floor(275 * month / 9)

N2 = floor((month + 9) / 12)

N3 = (1 + floor((year - 4 * floor(year / 4) + 2) / 3))

N = N1 - (N2 * N3) + day - 30

 

2. convert the longitude to hour value and calculate an approximate time

 

lngHour = longitude / 15

 

if rising time is desired:

t = N + ((6 - lngHour) / 24)

if setting time is desired:

t = N + ((18 - lngHour) / 24)

 

3. calculate the Sun's mean anomaly

 

M = (0.9856 * t) - 3.289

 

4. calculate the Sun's true longitude

 

L = M + (1.916 * sin(M)) + (0.020 * sin(2 * M)) + 282.634

NOTE: L potentially needs to be adjusted into the range [0,360) by adding/subtracting 360

 

5a. calculate the Sun's right ascension

 

RA = atan(0.91764 * tan(L))

NOTE: RA potentially needs to be adjusted into the range [0,360) by adding/subtracting 360

 

5b. right ascension value needs to be in the same quadrant as L

 

Lquadrant = (floor( L/90)) * 90

RAquadrant = (floor(RA/90)) * 90

RA = RA + (Lquadrant - RAquadrant)

 

5c. right ascension value needs to be converted into hours

 

RA = RA / 15

Tyle, że w punkcie drugim podstawiając:

t = N + ((12 - lngHour) / 24)

 

Aha, no i z którego punktu (5a, 5b czy 5c) wyciągnać wartość rektascencji potrzebną do wzoru:

UT_Sun_in_south = ( RA - GMST0 - long ) / 15.0

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ę.