Рефераты. Тригонометричні ефемериди планет Сонячної системи p>за одну годину чи одну хвилину ( відповідно n=1/24, n=1/1440).

[pic] ( в а.о.2 )

( 3 )

Знаючи орбітальну швидкість (км/с) можемо визначити лінійну довжину дуги

еліпса орбіти за один день ( відповідно за 1 год., за 1 хв. )

R:= vорб * 86400 / AO ( * n ) ( в а.о.
) ( 4 )

де:

86400 – кількість секунд у дні ( 60*60*24 )

AO – астрономічна одиниця (середня відстань від Землі до Сонця)

Нам необхідно знайти ( - кут переміщення планети за n-днів.


[pic][pic] [pic]

[pic]

[pic] [pic]

[pic] ( 5 )

[pic]

[pic]

( 6 )

Знайдемо довготу на 10 січня 1990р. : ( = (поч + ( . За формулою ( 2 ) визначимо

точніше r2 радіус-вектор на 10 січня 1990р.

На початку циклу обчислень ми посуваємо початковий момент на 1 день ( або

n-днів). В кінці циклу ми прирівнюємо r1:=r2 і перевіряємо чи початковий мо-

мент часу став рівним моменту спостереження.

Другим кроком програми буде знаходження видимих екваторіальних координат планети: пряме піднесення ( і схилення (. Пряме піднесення ( - вимірюється від точки весняного рівнодення вздовж небесного екватора назустріч видимому добовому обертанню небесної сфери до кола схилень світила і вимірюється в годинній мірі від 0 до 24h ( AA ). Схилення ( - вимірюється в градусах від небесного екватора вздовж кола схилень до світила (від–900 до+900 ) ( AB ).
Здавалось пряме піднесення ( легко визначити розділивши довготу AG на 15 (
150 = 1 год. ). Однак це було б правильно, якби Земля і планета рухалися на одній прямій від Сонця. Насправді нам необхідно розрахувати зміщення (( скорегувавши таким чином значення AG/15.

[pic][pic]

[pic]

[pic]

[pic]

( 7 )

тоді AA:=( + ((/15

Схилення планет однозначно визначити не можна . Оскільки площина орбіти

планети нахилена до площини екліптики під кутом і ( Aei ) , то знаючи піднесення

АА визначимо, яке б було схилення планети якби вона рухалася по екліптиці, а потім скорегуємо його відповідно до нахилу і на ((.

Схилення ( точки екліптики, знаючи його піднесення (, можна визначити за формулою:

[pic]

де ( - кут нахилу екліптики до небесного екватора ( 23,50 ).

Зміщення (( можна знайти розв’язавши задачу стереометрії. Виведення кінце-

вої формули досить велике, тому дамо остаточний результат:

[pic][pic] ( 8 )

де: ( = ( - (

( = ( - (

( = arcsin ( sin( * sin( )

тоді: AB= ( + ((

Знаючи Z і R з формули ( 8 ) можемо визначити лінійну відстань між
Землею

і планетою

[pic] ( 9 )

Знаючи AV і екваторіальний радіус планети можемо визначити видимий кутовий

діаметр планети.

[pic] [pic] ( 10 )

Фазу планети визначають так:

[pic][pic]

[pic]

[pic]

[pic] [pic]

[pic]

Фаза планети – це її форма, що її бачить спостерігач із Землі. Вона зумовлена

змінами в умовах освітленості планети Сонцем під час руху навколо нього. В ас-

трономії фазу описують числом – це відношення найбільшої ширини освітленої

частини диска планети до його діаметра.

Важливими ефемеридами планети є умови її видимості, тобто час сходу і заходу азимути точок сходу і заходу на горизонті.

Сходом і заходом світила – називають момент перетину світилом математичного горизонту, коли воно переходить з невидимої півкулі в видиму і навпаки. Годинний кут t сходу і заходу світила з координатами ( і ( на географічній широті ( визначають з виразу:

[pic] (12) де:

( - рефракція на горизонті (0,590),

R – кутовий радіус світила (AYD/2),

p – горизонтальний паралакс (RЗ/(AV*AO))

Азимут А світила при сході і заході можна знайти з виразу:

[pic] (13)

Отже, нам потрібно знайти годинний кут. Годинний кут – це час, що минув з мо-

менту верхньої кульмінації. Годинний кут t визначають за місцевим зоряним ча-

сом спостерігача s і прямим піднесенням (: t=s-(. Звідси час верхньої кульмінації

можна знайти за умовою s=(. оскільки: s = s0 + T0 + 0.0027*T0;

то: ( = s0 + T0 * (1.0027);

T0 * (1.0027) = ( - s0;

T0 = ( - s0 / 1.0027

(14)

де:

s0 – місцевий зоряний час в 0h по всесвітньому часу,

T0 – час кульмінації.

Знаючи час кульмінації, додавши і віднявши від нього годинний кут сходу і

заходу отримуємо відповідно час сходу і заходу, а далі за формулою (13) азимути

точок сходу і заходу.

Програма містить алгоритми, які враховують особливості додавання і віднімання годинних величин, адже:

23h + 2h ( 25h

23h + 2h = 1h ( 25h – 24h )

2h - 3h ( -1h

2h - 3h =23h ( -1h + 24h )

Оскільки початкові координати планет взяті в 0h за всесвітнім часом то кінцеві

результати також будуть відповідати йому. Щоб привести результати часових

вимірів до місцевого часу спостерігача треба врахувати географічну довготу
(

місця спостереження:

Тм = Т0 - (/15 + n

Літній час зумовлює додавання ще однієї години ( n=1 літо, n=0 зима).

2. Розробка алгоритму та структури програми.

Нижчеописана програма на мові Delphi є лише інструментом приблизного

обчислення руху планет Сонячної системи. Програма розбита на кілька структурниx частин : Form1 ’Ефемериди планет Сонячної системи’, Form2
‘Обчислення ефемерид планет Сонячної системи’, Form3 ‘Огляд зоряного неба’,
Form4 ‘Детальний огляд зоряного неба’.

У Form1 відображена загальна інформація про курсову роботу. В полі
Edit1 ми вводимо пароль і нажимаємо кнопку “Старт”(Button1) для запуску програми. У програмі процедура TForm1.Button1Click порівнює правильність паролю. Якщо пароль вірний сворюється Form2, в протилежному випадку видається повідомлення про невірний пароль. Кнопка “Фініш”( Button2) закриває програму.

У Form2 відбувається процес обчислення. Першим кроком необхідно вибрати планету. Для цього у GroupBox1 зібрано 9 RadioButton. Процедури
TForm2.RadioButton1..9Click відповідають за вибір міток планет, які будуть в подальшому використовуватись програмою в інших формах. Другим кроком ми вибираємо дату моменту спостереження у формі день.місяць.рік. з трьох
ComboBox, що зібрані в GroupBox2. Третім кроком вводимо координати місця спостереження – широту в поле Edit1, довготу в поле Edit2, що зібрані у
GroupBox3. При натискані кнопки “Help” запускається процедура
TForm2.Button4Click, яка створює інформаційне вікно про географічні координати деяких міст України і світу. Слід врахувати що програма працює в межах від 8 січня 1990 року до 31 грудня 2099 року. Задання дат поза межами робочої зони, не введення мітки планети , неправильне введення номера дня місяця, місяця , географічної широти місця спостереження вважається за помилку і виводить програму на автоматичний вибір початкових даних.

При натисканні кнопки “Обчислити”(Button1) запускається весь процес обчислення. Запускається процедура Eagth1 з модуля Eagth. Необхідність введення модуля Eagth, де ми знаходимо координати Землі відносно Сонця, зумовлена тим, що ми ведемо спостереження із Землі, внаслідок чого ми спостерігаємо нерівномірний рух планети по небу, то він рухається, то раптом стає і починає рухатись назад. Після цього запускається модуль
Mars(для прикладу), де виконуються три процедури.

В першій процедурі визначають геліоцентричну довготу і радіус вектор
Марса у циклі з кроком N4 днів з моменту 9.01.1990р. до заданого моменту спостереження. Обчислення проводяться на основі 2 закону Кеплера про рівність площ секторів еліпса орбіти за одинаків проміжок часу.

У другій процедурі визначають видимі координати Марса в заданий момент

на зоряному небі в екваторіальній системі координат. Для цього використовую-

чи дані з модуля Eagth і процедури Mars1 розв’язують задачу стереометрії: виз-

начають кутове зміщення Марса по прямому піднесенню від істинного і відхи-

лення схилення від площини екліптики. В процесі обчислення ми можемо виз-

начити лінійну відстань від Землі до Марса і знаючи лінійний радіус Марса мо-

жемо визначити видимий кутовий діаметр і фазу диска планети.

Третя процедура модуля Mars має більш зрозуміле значення для простого користувача програми оскільки визначає час сходу, заходу і кульмінації Марса.

Кульмінація – це момент проходження небесного меридіана, коли планета зна-

ходиться в найвищій точці над горизонтом і має найкращі умови для спостере-

ження. Також визначається азимут точок сходу і заходу планети на горизонті.

Результати обчислення виводяться на форму як множина Label, що зібрані у GroupBox4. Кнопка Button3 запускає процедуру створення Form3.

У Form 3 на фоні зоряного неба відображається вибрана планета. У процедурі

procedure TForm3.FormCreate(Sender: TObject); створюється фон зоряного неба через елемент Image1. Вводиться Canvas.Rectangle відовідного розміру заповняється Canvas.Brush чорним кольором і через масив координат і зоряних величин заповняється зорями через побудову
Image1.Canvas.Ellipse(x1,y1,x2,y2);

Через кнопку “Показати” procedure SpeedButton1Click(Sender: TObject); відбувається перетворення зоряних координат планети на пікселі відповідно масштабу Image1 і зображається сама планета відповідним кольором через

Image1.Canvas.Pen.Color і Image1.Canvas.Ellipse(x4,y4,x5,y5);

Через кнопку “Закрити” procedure TForm3.Button1Click(Sender: TObject); відбувається закриття форми.

Через кнопку “Детальніше” procedure TForm3.SpeedButton2Click(Sender:
TObject); створюється Form4.

У Form4 зображається більш детальніше фон зоряного неба. Завдяки збільшенню розмірів Image1, ми змушені використати полосу прокрутки.
Створення форми відбувається аналогічно Form3. Відмінність полягає у тому, що зображення планети миготить. Це дозволяє наочно відрізнити планету від зірок. Досягається це в procedure TForm4.Timer1Timer(Sender: TObject);, де ми вводимо рахівник і через порівняння чи він парний чи непарний зображення планети проявляється то замальовується чорним кольором під колір фону.

3. Програма на мові програмування Delphi.

[pic]

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms,
Dialogs, ExtCtrls, StdCtrls,Unit2, jpeg;

type
TForm1 = class(TForm)

Panel1: TPanel;

Image1: TImage;

StaticText1: TStaticText;

StaticText2: TStaticText;

StaticText3: TStaticText;

StaticText4: TStaticText;

StaticText5: TStaticText;

GroupBox1: TGroupBox;

Button1: TButton;

Button2: TButton;

Edit1: TEdit;

StaticText6: TStaticText;

Image2: TImage; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TObject);

private

{ Private declarations } public

{ Public declarations } end;

var
Form1: TForm1;
Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject); var PAR : string; begin
PAR:=Edit1.Text;
If PAR='orion 17' Then begin

Form2:=TForm2.Create(Application);

Form2.ShowModal;

Form2.Free;

Edit1.Clear; end else begin if MessageDlg('Пароль невірний! Значення "
'+Edit1.Text+' " не є паролем! Зверніться до розробника', mtError,[mbOK],0)=mrOK then

Edit1.Clear; end; end; procedure TForm1.Button2Click(Sender: TObject); begin close; end; procedure TForm1.FormCreate(Sender: TObject); begin
Image1.Picture.LoadFromFile('star.jpg');
Image2.Picture.LoadFromFile('star2.jpg'); end;

end.
[pic] unit Unit2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms,Math,
Dialogs, StdCtrls,
ExtCtrls,Unit3,KonstPLN,Eagth,Mars,Jupiter,Saturn,Mercury,
Venus,Uran,Neptun,Pluton, Common,Unit4;

type
TForm2 = class(TForm)

Panel1: TPanel;

GroupBox1: TGroupBox;

GroupBox2: TGroupBox;

GroupBox3: TGroupBox;

GroupBox4: TGroupBox;

Button1: TButton;

Button2: TButton;

Button3: TButton;

Button4: TButton;

Image1: TImage;

Image2: TImage;

RadioButton1: TRadioButton;

---------------------------

RadioButton9: TRadioButton;

StaticText1: TStaticText;

----------------------------

StaticText5: TStaticText;

ComboBox1: TComboBox;

ComboBox2: TComboBox;

ComboBox3: TComboBox;

Edit1: TEdit;

Edit2: TEdit;

Label1: TLabel;

---------------------------

Label46: TLabel; procedure RadioButton1Click(Sender: TObject);

---------------------------------------------- procedure RadioButton9Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private

{ Private declarations } public

{ Public declarations } end;

var

Form2: TForm2;
Form3: TForm3;

PLN,D0,M0,R0,i,DR,n : integer;
FI,LB,k,S0,P0,RM, ED,EG,ER,ER0,ESD,EH,ER1,EGD,
AD,AG,AR,x,AR0,ASD,AH,AR1,AGD, AAD1,ARS,AZE,AZP,
ABD,AV,AYD,AYDS,AAD0,AAD,AA,AAM,AAS,AID1,AID2,AID,AB,ABM,AF,
AT1,ATK,ATKL,
ATKLM,AP,AT2,AT3,ATG,ATS,ATSL,ATSLM,ATZ,ATZL,ATZLM,AZ,AAH,ABG,ATKLH,
ATSLH,ATZLH :real; implementation

{$R *.dfm}

procedure TForm2.Button4Click(Sender: TObject); begin
MessageDlg('Інформація! Деякі географічні координати:'+#13+'Чортків
FI=49.03, LB=25.83'+#13+'Тернопіль FI=49.6, LB=25.6'+#13+'Львів FI=49.8,
LB=24'+#13+'Київ FI=50.5, LB=30.5'+#13+'Лондон(Грінвіч) FI=51.6, LB=0'
,mtInformation,[mbOK],0); end;

procedure TForm2.Button3Click(Sender: TObject); begin close; end;

procedure TForm2.RadioButton1Click(Sender: TObject); begin
PLN:=1;ZPL:=1; ZPL1:=1;
Image1.Picture.LoadFromFile('mercury.jpg'); end;

------------------------------------------------------

procedure TForm2.RadioButton9Click(Sender: TObject); begin
PLN:=9; ZPL:=9; ZPL1:=9;
Image1.Picture.LoadFromFile('pluton.jpg'); end;

procedure TForm2.FormCreate(Sender: TObject); begin
Image1.Picture.LoadFromFile('star1.jpg');
Image2.Picture.LoadFromFile('sun.bmp');
ComboBox1.ItemIndex:=8;
ComboBox2.ItemIndex:=0;
ComboBox3.ItemIndex:=0;
Label4.Visible:=false;
----------------------
Label46.Visible:=false;
Button2.Enabled:=false; end;

procedure TForm2.Button1Click(Sender: TObject); begin
Button2.Enabled:=false;
Label4.Visible:=false;
------------------------
Label46.Visible:=false; if PLN=0 then //захист від помилки begin if MessageDlg(' Ви забули вибрати планету!'+#13+'По замовчуванню буде вибрана Земля.'

,mtError,[mbOK],0)=mrOK then begin

RadioButton3.Checked:=true;

PLN:=3;

Image1.Picture.LoadFromFile('eath.jpg'); end; end;
D0:=StrToInt(ComboBox1.Text);
ZD:=StrToInt(ComboBox1.Text);
ZD1:=StrToInt(ComboBox1.Text); if (D031) then //захист від дурня begin if MessageDlg('Помилка введення номера дня місяця!'

,mtError,[mbOK],0)=mrOK then begin

ComboBox1.ItemIndex:=8;

D0:=StrToInt(ComboBox1.Text);

ZD:=StrToInt(ComboBox1.Text);

ZD1:=StrToInt(ComboBox1.Text); end; end; if ComboBox2.ItemIndex=0 then begin

M0:=1;ZM:=1; ZM1:=1; end;

-----------------------------------

if ComboBox2.ItemIndex=11 then begin

M0:=12;ZM:=12; ZM1:=12; end; if M0=0 then //захист від помилки begin if MessageDlg('Введення значення місяця цифрою недопустиме!', mtError,[mbOK],0)=mrOK then begin

ComboBox2.ItemIndex:=0;

M0:=1;

ZM:=1;

ZM1:=1; end; end;

R0:=StrToInt(ComboBox3.Text);

ZR:=StrToInt(ComboBox3.Text);

ZR1:=StrToInt(ComboBox3.Text); if (R02100) then //захист від помилки begin if MessageDlg('Помилка граничних меж дат спостереження 1990-2100 рр.'

,mtError,[mbOK],0)=mrOK then begin

ComboBox3.ItemIndex:=0;

R0:=StrToInt(ComboBox3.Text);

ZR:=StrToInt(ComboBox3.Text);

ZR1:=StrToInt(ComboBox3.Text); end; end;

FI:=StrToFloat(Edit1.Text); if abs(FI)>90 then //захист від помилки begin if MessageDlg('Помилка введення географічної широти місця спостереження!'+#13+' Має бути в межах +-90 градусів', mtError,[mbOK],0)=mrOK then begin

Edit1.Text:='56';

FI:=StrToFloat(Edit1.Text); end; end;

LB:=StrToFloat(Edit2.Text); if LB


Страницы: 1, 2



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.