Вернуться   Общая Астрономическая Конференция > Форумы общей направленности > Общий форум любителей астрономии
Регистрация Справка Правила форума Календарь Поиск Сообщения за день Все разделы прочитаны

Ответ
 
Опции темы Опции просмотра
Старый 02.02.2003, 01:58   #1
Гость
 
Сообщений: n/a
По умолчаниюПродолжительность полярной ночи?

Возвращаясь к теме о высоте солнца над горизонтом [img]images/smiles/icon_wink.gif[/img] А есть простая формула продолжительности полярной ночи (а заодно уж и дня) в зависимости от широты и наклона оси планеты? Большая точность не нужна, нужна грубая прикидка.
  Ответить с цитированием
Старый 14.02.2003, 05:27   #2
May
Старожил
 
Аватар для May
 
Регистрация: 05.12.2000
Адрес: Сев.Кавказ
Сообщений: 182
По умолчаниюПродолжительность полярной ночи?

задали задачку [img]images/smiles/icon_smile.gif[/img]
Вот вам простые формулы (проще по-моему некуда) - в результате получите номера дней в году, когда начинается и заканчивается полярные день и ночь, отнимите одно от другого - будет продолжительность дня и ночи:
fi-широта, e-наклон эклиптики к экватору, koeff=365/360 (365 потому что столько дней в году (я надеюсь, мы Землю рассматриваем [img]images/smiles/icon_wink.gif[/img], а 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, 06:01   #3
May
Старожил
 
Аватар для May
 
Регистрация: 05.12.2000
Адрес: Сев.Кавказ
Сообщений: 182
По умолчаниюПродолжительность полярной ночи?

а если еще проще, то продолжительность полярного дня (как и ночи, они равны):
Long_of_day=2*koef*ARCCOS(COS(fi)/SIN(e))
May вне форума  Ответить с цитированием
Старый 14.02.2003, 06:51   #4
Гость
 
Сообщений: n/a
По умолчаниюПродолжительность полярной ночи?

Спасибо. Рассматриваем, естес-но, не Землю, кому она нужна [img]images/smiles/icon_wink.gif[/img] Если быть совсем точным - Землю, но не нашу [img]images/smiles/icon_wink.gif[/img] Ну да 391 вместо 365 подставить не проблема.
Для полюса (в случае Земли) ошибка по сравнению со справочником получается значительная - реально день длиннее ночи на 12 дней (оно и понятно, ночь наступает, когда диск уходит на горизонт полностью, а не до середины - или тут еще и рефракции потоптались?) Но, очевидно, с уменьшением широты и ростом крутизны солнечной трактории эта ошибка будет уменьшаться, так что для моих целей сойдет.
  Ответить с цитированием
Старый 14.02.2003, 18:43   #5
May
Старожил
 
Аватар для May
 
Регистрация: 05.12.2000
Адрес: Сев.Кавказ
Сообщений: 182
По умолчаниюПродолжительность полярной ночи?

Земля и 391 день.. так и хочется чего-нибудь забацать, типа:
На 156-ой день наконец-то наступило сизое полярное утро... Два нереяшливых птеродактиля, сидя на замшелом карнизе Ледяной Башни, пристально наблюдали за двумя озабоченными гоблинами, которые...
May вне форума  Ответить с цитированием
Старый 14.02.2003, 18:59   #6
Гость
 
Сообщений: n/a
По умолчаниюПродолжительность полярной ночи?

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

#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 [img]images/smiles/icon_sad.gif[/img]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--);}
  Ответить с цитированием
Старый 14.02.2003, 19:02   #7
Гость
 
Сообщений: n/a
По умолчаниюПродолжительность полярной ночи?

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

#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--);}
  Ответить с цитированием
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 12:02.


Powered by vBulletin® Version 3.8.4 Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.