Смекни!
smekni.com

Тригонометричні ефемериди планет Сонячної системи (стр. 3 из 6)

В першій процедурі визначають геліоцентричну довготу і радіус вектор Марса у циклі з кроком 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.

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.

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 (D0<=0) or( D0>31) 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 (R0<1990) or (R0>2100) 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<0 then

begin

LB:=360+LB;

end;

i:=0;

if R0=1992 or 1996 or 2000 or 2004 or 2008 or 2012 then //високосні роки

begin

i:=1 //29 лютого

end;

case M0 of //DR номер дня моменту спостереження

1: begin DR:=D0 ; n:=0 ; k:=-0.040;end; //з початку року

2: begin DR:=31+D0; n:=0;k:=-0.094;end;

3: begin DR:=59+i+D0; n:=0;k:=-0.13;end; //n мітка пори року 0-зима,1-літо

4: begin DR:=59+i+31+D0 ; n:=1;k:=-0.131;end;

5: begin DR:=59+i+61+D0; n:=1;k:=-0.103;end; //k середня поправка зоряного часу

6: begin DR:=59+i+92+D0; n:=1;k:=-0.051;end;

7: begin DR:=59+i+122+D0; n:=1;k:=0.013;end;

8: begin DR:=59+i+153+D0; n:=1;k:=0.073;end;

9: begin DR:=59+i+184+D0; n:=1;k:=0.107;end;

10: begin DR:=59+i+214+D0; n:=0;k:=0.114;end;

11: begin DR:=59+i+245+D0; n:=0;k:=0.083;end;

12: begin DR:=59+i+275+D0; n:=0;k:=0.028;end;

end;

S0:=int((12-M0)/10); //формула 1

P0:=int((S0*12+M0-2)*30.59+D0);

RM:=int((R0-S0-1900)*365.25+P0); //номер дати спостереження з 1 березня 1900р.

if RM<=32851 then //захист від помилки

begin

if MessageDlg('Помилка введення дати спостереження!'+#13+' Має бути не раніше 9 січня 1990р.',

mtError,[mbOK],0)=mrOK then

begin

ComboBox1.ItemIndex:=8;

D0:=StrToInt(ComboBox1.Text);

ComboBox2.ItemIndex:=0;

M0:=1;

ComboBox3.ItemIndex:=0;

R0:=StrToInt(ComboBox3.Text);

end;

end;

case PLN of

1: begin Eagth1(EG,ER,ER0,ESD,EH,ER1,EGD, ED,DR);

Mercury1(AD,AG,AR,x,AR0,ASD,AH,AR1,AGD,RM,EG);

Mercury2(AAD1,ARS,AZE,AZP,ABD,AV,AYD,AYDS,AAD0,AAD,AA,AAM,AAS,AID1,AID2,AID,AB,ABM,AF,

ER,AG,EG,AR, AAH,ABG,R0);

Mercury3(AT1,ATK,ATKL,ATKLM,AP,AT2,AT3,ATG,ATS,ATSL,ATSLM,ATZ,ATZL,ATZLM,AZ,AA,EG,k,LB,

AYD,AV,FI,AB, ATKLH,ATSLH,ATZLH,n);end; //запуск процедур в модулях