Документ взят из кэша поисковой машины. Адрес оригинального документа : http://www.starlab.ru/archive/index.php/t-159.html
Дата изменения: Unknown
Дата индексирования: Sun Apr 10 01:33:27 2016
Кодировка: Windows-1251
Продолжительность полярной ночи? [Архив] - Общая Астрономическая Конференция

PDA

Просмотр полной версии : Продолжительность полярной ночи?


02.02.2003, 00:58
Возвращаясь к теме о высоте солнца над горизонтом images/smiles/icon_wink.gif А есть простая формула продолжительности полярной ночи (а заодно уж и дня) в зависимости от широты и наклона оси планеты? Большая точность не нужна, нужна грубая прикидка.

May
14.02.2003, 04:27
задали задачку images/smiles/icon_smile.gif
Вот вам простые формулы (проще по-моему некуда) - в результате получите номера дней в году, когда начинается и заканчивается полярные день и ночь, отнимите одно от другого - будет продолжительность дня и ночи:
fi-широта, e-наклон эклиптики к экватору, koeff=365/360 (365 потому что столько дней в году (я надеюсь, мы Землю рассматриваем images/smiles/icon_wink.gif, а 360 потому что столько градусов на эклиптике)), хотя этот коэффициент можно и убрать, он мал; все арксинусы в градусах.

Полярный день: N_polarday_begin=koeff*ARCSIN(COS(fi)/SIN(e))+82
(82 потому что это номер дня равноденствия в году)
N_polarday_end=koeff*(180-ARCSIN(COS(fi)/SIN(e))+82

Полярная ночь:
N_polarnight_begin=koeff*(180+ARCSIN(COS(fi)/SIN(e))+82
N_polarnight_end=-koeff*ARCSIN(COS(fi)/SIN(e))+82

Для fi=90 (Северный полюс) день длится с 82 по 264 день, ночь соотвественно с 264 по 82, ну а чем поюжнее, тем это счастье короче.
Ах да, наклон оси нужен... если к эклиптике, то замените e на 90-i.

May
14.02.2003, 05:01
а если еще проще, то продолжительность полярного дня (как и ночи, они равны):
Long_of_day=2*koef*ARCCOS(COS(fi)/SIN(e))

14.02.2003, 05:51
Спасибо. Рассматриваем, естес-но, не Землю, кому она нужна images/smiles/icon_wink.gif Если быть совсем точным - Землю, но не нашу images/smiles/icon_wink.gif Ну да 391 вместо 365 подставить не проблема.
Для полюса (в случае Земли) ошибка по сравнению со справочником получается значительная - реально день длиннее ночи на 12 дней (оно и понятно, ночь наступает, когда диск уходит на горизонт полностью, а не до середины - или тут еще и рефракции потоптались?) Но, очевидно, с уменьшением широты и ростом крутизны солнечной трактории эта ошибка будет уменьшаться, так что для моих целей сойдет.

May
14.02.2003, 17:43
Земля и 391 день.. так и хочется чего-нибудь забацать, типа:
На 156-ой день наконец-то наступило сизое полярное утро... Два нереяшливых птеродактиля, сидя на замшелом карнизе Ледяной Башни, пристально наблюдали за двумя озабоченными гоблинами, которые...

14.02.2003, 17:59
Не угадали, это не фэнтези, это вполне классическая НФ images/smiles/icon_wink.gif Птеродактилей там нет, зато есть крупные морские ящеры, правда, в тропических широтах. Кстати, ежели кому надо - вот программка:

#include <stdio.h>
#include <math.h>
float year,e;
#define koeff year/360
#define pi 3.14159265358
int fi,night;
double gr2rad(double g)
{return pi*g/180;}
double rad2gr(double r)
{return 180*r/pi;}
int round(double x)
{return x>0?(int)x+0.5 images/smiles/icon_sad.gifint)x-0.5;}
int daynight()
{double c=cos(gr2rad(fi))/cos(gr2rad(e));
if (c>1) return 0;
night=koeff*2*rad2gr(acos(c));
return printf("\nНа широте %d - %d",fi,round(night));
}

void main()
{printf("Число дней в году и наклон оси?");
scanf("%g %g",&year,&e);
for (fi=90;daynight();fi--);}

14.02.2003, 18:02
Тьфу, зараза. Смайлики ей в программном коде поискать захотелось... Вот:

#include <stdio.h>
#include <math.h>
float year,e;
#define koeff year/360
#define pi 3.14159265358
int fi,night;
double gr2rad(double g)
{return pi*g/180;}
double rad2gr(double r)
{return 180*r/pi;}
int round(double x)
{return x>0?(int)x+0.5:(int)x-0.5;}
int daynight()
{double c=cos(gr2rad(fi))/cos(gr2rad(e));
if (c>1) return 0;
night=koeff*2*rad2gr(acos(c));
return printf("\nНа широте %d - %d",fi,round(night));
}

void main()
{printf("Число дней в году и наклон оси?");
scanf("%g %g",&year,&e);
for (fi=90;daynight();fi--);}