Реферат: Тригонометричні ефемериди планет Сонячної системи
ER1:=(Eao*(1-sqr(Eeo)))/(1+Eeo*cos((EG-Eap)*PI/180)); //формула 2
ER:=ER1;
Until DR<=ED; //обчислення до моменту спостереження
end;
end.
unit Mars;
interface
Uses KonstPLN,Eagth,Math;
Const AD5=32852; //номер дня 9 січня 1990р. з 1 березня 1900р.
AG5=235.0; AR5=1.538; //початкове положення Марса 9 січня 1990р.
Procedure Mars1(var AD,AG,AR,x,AR0,ASD,AH,AR1,AGD,RM,EG:real);
Procedure Mars2(var 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:real;var R0:integer);
Procedure Mars3(var 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:real;var n:integer);
implementation
Procedure Mars1;
begin
AD:=AD5; AG:=AG5; AR:=AR5; x:=0;
AR0:=Avo*86400/AO*N0; //формула 4 шлях проходження за N4 дні
ASD:=(PI*sqr(Aao)*sqrt(1-sqr(Aeo))/Atd)*N0;//формула 3 площа еліпса орбіти за N4 дні
Repeat
AD:=AD+N0; //2 закон Кеплера
AH:=2*ASD/AR; //радіус-вектор через N4 дні
AR1:=sqrt(sqr(AH)+sqr(AR-sqrt(abs(sqr(AR0)-sqr(AH)))));//формула 5
AGD:=arctan((1/AR1*AH)/sqrt(1-sqr(1/AR1*AH)))*180/PI;//формула 6
AG:=AG+AGD; //кут проходу за N4 дні
While AG>=360 do
begin
AG:=AG-360
end;
AR1:=(Aao*(1-sqr(Aeo)))/(1+Aeo*cos((AG-Aap)*PI/180));//формула 2
AR:=AR1;
x:=x+1 //кількість циклів обчислення
Until RM<=AD; //обчислення до моменту спостереження
end;//Mars1
Procedure Mars2;
begin
AAD1:=arctan((ER*sin((AG-EG)*PI/180))/(AR-ER*cos((AG-EG)*PI/180)))*180/PI;//зміщення прямого
ARS:=sin((AG-Avy)*PI/180)*sin(Aie*PI/180); //піднесення, формула 7
AZE:=AR*ARS;
AZP:=sqrt(sqr(ER*sin((EG-AG)*PI/180))+sqr(AR*sqrt(1-sqr(ARS))-ER*cos((EG-AG)*PI/180)));
ABD:=arctan(AZE/AZP)*180/PI; //зміщення схилення, формула 8
AV:=sqrt(sqr(AZE)+sqr(AZP));//лінійна відстань між Землею і Марсом, формула 9
AYD:=2*arctan(Are/(AV*AO))*180/PI;//кутовий діаметр Марса, формула 10
AYDS:=AYD*3600;
AAD0:=arctan(sqrt(1-sqr((sqr(AV)+sqr(AR)-sqr(ER))/(2*AV*AR)))/((sqr(AV)+sqr(AR)-sqr(ER))/
(2*AV*AR)))*180/PI;
AAD:=sqrt(abs(sqr(AAD0)-sqr(ABD)));
If AAD1<0 then
begin
AAD:=-AAD;
end;
AA:=(AG+AAD)/15; //пряме піднесення Марса
If AA>=24 then
begin
AA:=AA-24;
end;
If AA<0 then
begin
AA:=AA+24;
end;
AAH:=int(AA);
AAM:=frac(AA)*60;
AAS:=frac(AAM)*60;
AID1:=sin((AA*15)*PI/180)*(Eri-0.00013011111*(R0-1900));//схилення точки екліптики
AID2:=arctan((sin((180-AA*15)*PI/180)*sin((Eri-0.00013011111*(R0-1900))*PI/180))/
(sqrt(1-sqr(sin((180-AA*15)*PI/180)*sin((Eri-0.00013011111*(R0-1900))*PI/180)))))*
180/PI; //те саме другим методом
AID:=(AID1+AID2)/2; //їх середнє значення
AB:=AID+ABD; //Схилення Марса
ABG:=int(AB);
ABM:=frac(AB)*60;
AF:=(1/2)+(cos(AAD0*PI/180)/2); //фаза диска Марса, формула 11
end;//Mars2
Procedure Mars3;
begin
AT1:=AA-(EG/15+k);
If AT1<0 then
begin
AT1:=AT1+24;
end;
ATK:=AT1/1.002738; //час кульмінації Марса, формула 14
ATKL:=ATK-LB/15+n; //місцевий час кульмінації
if ATKL<0 then
begin
ATKL:=ATKL+24;
end;
ATKLH:=int(ATKL); ATKLM:=frac(ATKL)*60;
AP:=90+0.59+(AYD/2)-(arctan(Ere/(AV*AO))*180/PI);
AT2:=(cos(AP*PI/180)-sin(FI*PI/180)*sin(AB*PI/180))/(cos(FI*PI/180)*cos(AB*PI/180));
AT3:=arctan(sqrt(1-sqr(AT2))/AT2)*180/PI;//годинний кут сходу і заходу Марса
if AT3<=0 then //формула 12
begin
AT3:=AT3+180;
end;
ATG:=AT3/15;
ATS:=ATK-ATG; //час сходу Марса
if ATS<0 then
begin
ATS:=ATS+24;
end;
ATSL:=ATS-LB/15+n; //місцевий час сходу
if ATSL<0 then
begin
ATSL:=ATSL+24;
end;
ATSLH:=int(ATSL); ATSLM:=frac(ATSL)*60;
ATZ:=ATK+ATG; //час заходу Марса
if ATZ>=24 then
begin
ATZ:=ATZ-24;
end;
ATZL:=ATZ-LB/15+n; //місцевий час заходу
if ATZL<0 then
begin
ATZL:=ATZL+24;
end;
ATZLH:=int(ATZL); ATZLM:=frac(ATZL)*60;
AZ:=arctan((cos(AB*PI/180)*sin(AT3*PI/180)/sin(AP*PI/180))/sqrt(1-sqr((cos(AB*PI/180)*
sin(AT3*PI/180))/sin(AP*PI/180))))*180/PI; //азимут Марса при сході і заході
if AB>0 then //формула 13
begin
AZ:=180-AZ;
end;
end;//Mars3
end.
unit Common;
interface
var
ZPL,ZD,ZM,ZR,ZPL1,ZD1,ZM1,ZR1 : integer;
ZAA,ZAB,ZAA1,ZAB1 :real;
implementation
end.
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Buttons, Common,Math,Unit4;
type
TForm3 = class(TForm)
Image1: TImage;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
Button1: TButton;
Label1: TLabel;
-----------------------
Label31: TLabel;
StaticText1: TStaticText;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
Mas = array[1..311] of real;
var
Form3: TForm3;
ZA,ZB,ZP : Mas;
ZAG,ZBG : integer;
ZAM,ZBM,x,y,x3,y3 : real;
x4,y4,x5,y5,x0,y0,x1,y1,x2,y2 :variant;
implementation
{$R *.dfm}
procedure TForm3.FormCreate(Sender: TObject);
var i:integer;
begin
SpeedButton2.visible:=false;
Label1.Visible:=false;
Label2.Visible:=false;
Label3.Visible:=false;
Label4.Visible:=false;
Label5.Visible:=false;
Label6.Visible:=false;
Image1.Canvas.Brush.Color:=clBlack;
Image1.Canvas.Brush.Style:=bsSolid;
Image1.Canvas.Rectangle(0,0,1010,255);
Image1.Canvas.pen.color:=clWhite;
Image1.Canvas.Moveto (0,0);
Image1.Canvas.LineTo (1000,0);
Image1.Canvas.LineTo (1000,250);
Image1.Canvas.LineTo (0,250);
Image1.Canvas.LineTo (0,0);
Image1.Canvas.MoveTo(0,139);
Image1.Canvas.LineTo (1000,139);
//ruscu
Image1.Canvas.MoveTo(1000,0);
Image1.Canvas.LineTo (1005,0);
Image1.Canvas.MoveTo(1000,28);
Image1.Canvas.LineTo (1005,28);
Image1.Canvas.MoveTo(1000,56);
Image1.Canvas.LineTo (1005,56);
Image1.Canvas.MoveTo(1000,83);
Image1.Canvas.LineTo (1005,83);
Image1.Canvas.MoveTo(1000,111);
Image1.Canvas.LineTo (1005,111);
Image1.Canvas.MoveTo(1000,139);
Image1.Canvas.LineTo (1005,139);
Image1.Canvas.MoveTo(1000,167);
Image1.Canvas.LineTo (1005,167);
Image1.Canvas.MoveTo(1000,194);
Image1.Canvas.LineTo (1005,194);
Image1.Canvas.MoveTo(1000,222);
Image1.Canvas.LineTo (1005,222);
Image1.Canvas.MoveTo(1000,250);
Image1.Canvas.LineTo (1005,250);
//ruscu
Image1.Canvas.MoveTo(1000,250);
Image1.Canvas.LineTo (1000,255);
Image1.Canvas.MoveTo(958,250);
Image1.Canvas.LineTo (958,255);
Image1.Canvas.MoveTo(917,250);
Image1.Canvas.LineTo (917,255);
Image1.Canvas.MoveTo(875,250);
Image1.Canvas.LineTo (875,255);
Image1.Canvas.MoveTo(833,250);
Image1.Canvas.LineTo (833,255);
Image1.Canvas.MoveTo(792,250);
Image1.Canvas.LineTo (792,255);
Image1.Canvas.MoveTo(750,250);
Image1.Canvas.LineTo (750,255);
Image1.Canvas.MoveTo(708,250);
Image1.Canvas.LineTo (708,255);
Image1.Canvas.MoveTo(667,250);
Image1.Canvas.LineTo (667,255);
Image1.Canvas.MoveTo(625,250);
Image1.Canvas.LineTo (625,255);
Image1.Canvas.MoveTo(583,250);
Image1.Canvas.LineTo (583,255);
Image1.Canvas.MoveTo(542,250);
Image1.Canvas.LineTo (542,255);
Image1.Canvas.MoveTo(500,250);
Image1.Canvas.LineTo (500,255);
Image1.Canvas.MoveTo(458,250);
Image1.Canvas.LineTo (458,255);
Image1.Canvas.MoveTo(417,250);
Image1.Canvas.LineTo (417,255);
Image1.Canvas.MoveTo(375,250);
Image1.Canvas.LineTo (375,255);
Image1.Canvas.MoveTo(333,250);
Image1.Canvas.LineTo (333,255);
Image1.Canvas.MoveTo(292,250);
Image1.Canvas.LineTo (292,255);
Image1.Canvas.MoveTo(250,250);
Image1.Canvas.LineTo (250,255);
Image1.Canvas.MoveTo(208,250);
Image1.Canvas.LineTo (208,255);
Image1.Canvas.MoveTo(167,250);
Image1.Canvas.LineTo (167,255);
Image1.Canvas.MoveTo(125,250);
Image1.Canvas.LineTo (125,255);
Image1.Canvas.MoveTo(83,250);
Image1.Canvas.LineTo (83,255);
Image1.Canvas.MoveTo(42,250);
Image1.Canvas.LineTo (42,255);
Image1.Canvas.MoveTo(0,250);
Image1.Canvas.LineTo (0,255);
//And
ZA[1]:=0.07; ZB[1]:=29.02; ZP[1]:=1;
ZA[2]:=1.09; ZB[2]:=35.34; ZP[2]:=1;
ZA[3]:=2.03; ZB[3]:=42.17; ZP[3]:=1;
ZA[4]:=0.38; ZB[4]:=30.48; ZP[4]:=0.5;
ZA[5]:=0.56; ZB[5]:=38.26; ZP[5]:=0.5;
ZA[6]:=1.37; ZB[6]:=48.34; ZP[6]:=0.5;
ZA[7]:=23.01; ZB[7]:=42.16; ZP[7]:=0.5;
ZA[8]:=23.47; ZB[8]:=46.24; ZP[8]:=0.5;
--------------------------------------------
//Lup
ZA[311]:=15.21; ZB[311]:=-36.13; ZP[311]:=0.5;
//ZA[]:=; ZB[]:=; ZP[]:=;
for i:=1 to 311 do
begin
ZAG:=Trunc(ZA[i]);ZAM:=frac(ZA[i])/0.6;
ZA[i]:=ZAG+ZAM;
ZBG:=Trunc(ZB[i]);ZBM:=frac(ZB[i])/0.6;
ZB[i]:=ZBG+ZBM;
if ZB[i]<=0 then
ZB[i]:=abs(ZB[i])+50
else ZB[i]:=50-ZB[i];
y:=250-(((90-ZB[i])/90)*250);
x:=((24-ZA[i])/24)*1000;
x0:=int(x);
y0:=int(y);
if ZP[i]=0.5 then
Image1.Canvas.Pixels[x0,y0]:=clWhite
else begin
Image1.Canvas.Pen.Color:=clWhite;
Image1.Canvas.Brush.Style:=bsSolid;
Image1.Canvas.Brush.Color:=clWhite;
x1:=int(x-ZP[i]);
y1:=int(y-ZP[i]);
x2:=int(x+ZP[i]);
y2:=int(y+ZP[i]);
Image1.Canvas.Ellipse(x1,y1,x2,y2);
end;
end;
end;
procedure TForm3.Button1Click(Sender: TObject);
begin
close;
end;
procedure TForm3.SpeedButton1Click(Sender: TObject);
begin
SpeedButton2.visible:=true;
Label1.Visible:=true;
Label2.Visible:=true;
Label3.Visible:=true;
Label4.Visible:=true;
Label5.Visible:=true;
Label6.Visible:=true;
case ZPL of
1: Label1.Caption:='Меркурій';
2: Label1.Caption:='Венеру';
4: Label1.Caption:='Марс';
5: Label1.Caption:='Юпітер';
6: Label1.Caption:='Сатурн';
7: Label1.Caption:='Уран';
8: Label1.Caption:='Нептун';
9: Label1.Caption:='Плутон';
end;
Label3.Caption:=IntToStr(ZD);
Label5.Caption:=IntToStr(ZR);
case ZM of
1: Label4.Caption:='січня';
2: Label4.Caption:='лютого';
3: Label4.Caption:='березня';
4: Label4.Caption:='квітня';
5: Label4.Caption:='травня';
6: Label4.Caption:='червня';
7: Label4.Caption:='липня';
8: Label4.Caption:='серпня';
9: Label4.Caption:='вересня';
10: Label4.Caption:='жовтня';