Реферат: Тригонометричні ефемериди планет Сонячної системи
11: Label4.Caption:='листопада';
12: Label4.Caption:='грудня';
end;
if ZAB<=0 then
ZAB:=abs(ZAB)+50
else ZAB:=50-ZAB;
y3:=250-(((90-ZAB)/90)*250);
x3:=((24-ZAA)/24)*1000;
x4:=int(x3-2);
y4:=int(y3-2);
x5:=int(x3+2);
y5:=int(y3+2);
case ZPL of
1:Image1.Canvas.Pen.Color:=clRed;
2:Image1.Canvas.Pen.Color:=clAqua;
4:Image1.Canvas.Pen.Color:=clRed;
5:Image1.Canvas.Pen.Color:=clYellow;
6:Image1.Canvas.Pen.Color:=clLime;
7:Image1.Canvas.Pen.Color:=clGreen;
8:Image1.Canvas.Pen.Color:=clBlue;
9:Image1.Canvas.Pen.Color:=clFuchsia;
end;
Image1.Canvas.Ellipse(x4,y4,x5,y5);
end;
procedure TForm3.SpeedButton2Click(Sender: TObject);
begin
Form4:=TForm4.Create(Application);
Form4.ShowModal;
Form4.Free;
SpeedButton2.visible:=false;
end;
end.
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Buttons, Common,Math;
type
TForm4 = class(TForm)
Image1: TImage;
Timer1: TTimer;
Button1: TButton;
Label1: TLabel;
-----------------------
Label32: TLabel;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
Mas = array[1..311] of real;
var
Form4: TForm4;
ZA,ZB,ZP : Mas;
ZAG,ZBG : integer;
ZAM,ZBM,x,y,x3,y3 : real;
x4,y4,x5,y5,x0,y0,x1,y1,x2,y2,g :variant;
implementation
{$R *.dfm}
procedure TForm4.FormCreate(Sender: TObject);
var i : integer;
begin
Timer1.Enabled:=true;
Image1.Canvas.Brush.Color:=clBlack;
Image1.Canvas.Brush.Style:=bsSolid;
Image1.Canvas.Rectangle(0,0,2020,505);
Image1.Canvas.pen.color:=clWhite;
Image1.Canvas.Moveto (0,0);
Image1.Canvas.LineTo (2000,0);
Image1.Canvas.LineTo (2000,500);
Image1.Canvas.LineTo (0,500);
Image1.Canvas.LineTo (0,0);
Image1.Canvas.MoveTo(0,278);
Image1.Canvas.LineTo (2000,278);
//ruscu
Image1.Canvas.MoveTo(2000,0);
Image1.Canvas.LineTo (2005,0);
Image1.Canvas.MoveTo(2000,56);
Image1.Canvas.LineTo (2005,56);
Image1.Canvas.MoveTo(2000,111);
Image1.Canvas.LineTo (2005,111);
Image1.Canvas.MoveTo(2000,167);
Image1.Canvas.LineTo (2005,167);
Image1.Canvas.MoveTo(2000,222);
Image1.Canvas.LineTo (2005,222);
Image1.Canvas.MoveTo(2000,278);
Image1.Canvas.LineTo (2005,278);
Image1.Canvas.MoveTo(2000,334);
Image1.Canvas.LineTo (2005,334);
Image1.Canvas.MoveTo(2000,388);
Image1.Canvas.LineTo (2005,388);
Image1.Canvas.MoveTo(2000,444);
Image1.Canvas.LineTo (2005,444);
Image1.Canvas.MoveTo(2000,500);
Image1.Canvas.LineTo (2005,500);
//ruscu
Image1.Canvas.MoveTo(2000,500);
Image1.Canvas.LineTo (2000,505);
Image1.Canvas.MoveTo(1916,500);
Image1.Canvas.LineTo (1916,505);
Image1.Canvas.MoveTo(1834,500);
Image1.Canvas.LineTo (1834,505);
Image1.Canvas.MoveTo(1750,500);
Image1.Canvas.LineTo (1750,505);
Image1.Canvas.MoveTo(1666,500);
Image1.Canvas.LineTo (1666,505);
Image1.Canvas.MoveTo(1584,500);
Image1.Canvas.LineTo (1584,505);
Image1.Canvas.MoveTo(1500,500);
Image1.Canvas.LineTo (1500,505);
Image1.Canvas.MoveTo(1416,500);
Image1.Canvas.LineTo (1416,505);
Image1.Canvas.MoveTo(1334,500);
Image1.Canvas.LineTo (1334,505);
Image1.Canvas.MoveTo(1250,500);
Image1.Canvas.LineTo (1250,505);
Image1.Canvas.MoveTo(1166,500);
Image1.Canvas.LineTo (1166,505);
Image1.Canvas.MoveTo(1084,500);
Image1.Canvas.LineTo (1084,505);
Image1.Canvas.MoveTo(1000,500);
Image1.Canvas.LineTo (1000,505);
Image1.Canvas.MoveTo(916,500);
Image1.Canvas.LineTo (916,505);
Image1.Canvas.MoveTo(834,500);
Image1.Canvas.LineTo (834,505);
Image1.Canvas.MoveTo(750,500);
Image1.Canvas.LineTo (750,505);
Image1.Canvas.MoveTo(666,500);
Image1.Canvas.LineTo (666,505);
Image1.Canvas.MoveTo(584,500);
Image1.Canvas.LineTo (584,505);
Image1.Canvas.MoveTo(500,500);
Image1.Canvas.LineTo (500,505);
Image1.Canvas.MoveTo(416,500);
Image1.Canvas.LineTo (416,505);
Image1.Canvas.MoveTo(334,500);
Image1.Canvas.LineTo (334,505);
Image1.Canvas.MoveTo(250,500);
Image1.Canvas.LineTo (250,505);
Image1.Canvas.MoveTo(166,500);
Image1.Canvas.LineTo (166,505);
Image1.Canvas.MoveTo(84,500);
Image1.Canvas.LineTo (84,505);
Image1.Canvas.MoveTo(0,500);
Image1.Canvas.LineTo (0,505);
//Image1.Canvas.TextOut(10,30,'Boo');
//And
ZA[1]:=0.07; ZB[1]:=29.02; ZP[1]:=1.5;
ZA[2]:=1.09; ZB[2]:=35.34; ZP[2]:=1.5;
ZA[3]:=2.03; ZB[3]:=42.17; ZP[3]:=1.5;
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:=500-(((90-ZB[i])/90)*500);
x:=((24-ZA[i])/24)*2000;
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;
case ZPL1 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(ZD1);
Label5.Caption:=IntToStr(ZR1);
case ZM1 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:='жовтня';
11: Label4.Caption:='листопада';
12: Label4.Caption:='грудня';
end;
if ZAB1<=0 then
ZAB1:=abs(ZAB1)+50
else ZAB1:=50-ZAB1;
y3:=500-(((90-ZAB1)/90)*500);
x3:=((24-ZAA1)/24)*2000;
x4:=int(x3-2.5);
y4:=int(y3-2.5);
x5:=int(x3+2.5);
y5:=int(y3+2.5);
case ZPL1 of
1:Image1.Canvas.Pen.Color:=clRed;
2:Image1.Canvas.Pen.Color:=clAqua;
4:Image1.Canvas.Pen.Color:=clRed;
5:Image1.Canvas.Pen.Color:=clYellow;
6:Image1.Canvas.Pen.Color:=clLime;
7:Image1.Canvas.Pen.Color:=clGreen;
8:Image1.Canvas.Pen.Color:=clBlue;
9:Image1.Canvas.Pen.Color:=clFuchsia;
end;
Image1.Canvas.Ellipse(x4,y4,x5,y5);
g:=0;
end;
procedure TForm4.Button1Click(Sender: TObject);
begin
Timer1.Enabled:=false;
close;
end;
procedure TForm4.Timer1Timer(Sender: TObject);
begin
begin
g:=g+1;
if g div 2=5 then
begin
Image1.Canvas.Pen.Color:=clBlack;
Image1.Canvas.Brush.Style:=bsSolid;
Image1.Canvas.Brush.Color:=clBlack;
Image1.Canvas.Ellipse(x4,y4,x5,y5);
g:=0;
end
else
begin
Image1.Canvas.Brush.Style:=bsSolid;
Image1.Canvas.Brush.Color:=clWhite;
case ZPL1 of
1:Image1.Canvas.Pen.Color:=clRed;
2:Image1.Canvas.Pen.Color:=clAqua;
4:Image1.Canvas.Pen.Color:=clRed;
5:Image1.Canvas.Pen.Color:=clYellow;
6:Image1.Canvas.Pen.Color:=clLime;
7:Image1.Canvas.Pen.Color:=clGreen;
8:Image1.Canvas.Pen.Color:=clBlue;
9:Image1.Canvas.Pen.Color:=clFuchsia;
end;
Image1.Canvas.Ellipse(x4,y4,x5,y5);
end;
end;
end;
end.
4. Тестування програми і
результати її виконання.
Здійснимо
тестування програми на предмет похибки результатів від істинних
значень. Для цього візьмемо з “
Астрономического календаря за 1990 г.” ефе-
мериди Марса на 31 жовтня 1990р. Результати, які видала програма на цю да-
ту приведенні в таблиці ( l = 0h, j = 560 ):
31.10.1990р. | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
істинне значення |
50.3 | 1.474 |
04h49.7m |
+22031’ |
17.0’’ | 0.96 |
17h32m |
02h13m |
10h49m |
+ -1350 |
програмне значення |
50.3 | 1.474 |
04h55.8m |
+22032’ |
16.9’’ | 0.96 |
17h41m |
02h18m |
10h56m |
+ -134.50 |
відносна похибка |
0.14% | 0.14% | 0.5% | 0.05% | 0.6% | 0% | 0.5% | 0.3% | 0.5% | 0.2% |
5.Висновки.
Отже повернімося до першого питання простої людини:” Куди направити свій погляд, щоб побачити якусь планету?” Найпростіша відповідь: ”В час кульмінації планети стати обличчям на південь ( напрям небесного меридіану ) і знаючи координату схилення d (AB) обчислити кут e між горизонтом і планетою за виразом:
e = j + ( d )
де: j - (FI) географічна широта місця
спостереження, яку приблизно можна виз-
начити за атласом світу.
Програма явно “сира” – що називається “demo-версія”. Середовище Delphi дозволило спростити зовнішній інтерфейс програми, ввід-вивід інформації. Введення графічних компонент дозволило наочно зобразити розміщення планет на фоні зоряного неба.
Використання принципово іншого обчислювального “ ядра “ дозволить не тільки досягти більш точних результатів, але й визначити ефемериди для інших тіл Сонячної системи: астероїдів і комет.
6.Список літератури.
1.Астрономический календарь на 1990
г. / Под. Ред. Д.Н.Пономарева. – М.:
Наука. Гл. ред. физ-мат. лит. 1989. – 336с.
2.Бронштейн В.А. Как движется Луна?
– М.: Наука. Гл. ред. физ-мат. лит.,
1990 – 208с.
3.Климишин И.А. Жемчужины звездного неба . – К.: Рад. шк., 1988. – 206с.
4.Климишин І.А., Тельнюк-Адамчук В.В.
Шкільний астрономічний довідник
Кн. Для вчителя. – К.: Рад. шк., 1990. – 287с.
5.Романовський Т.Б. Микрокалькуляторы в рассказах и играх
– К.: Рад. шк.,
1989. – 223с.
6.Хоровитц Н. Поиски жизни в
Солнечной системе: Пер. с англ./ Под ред. и
с предисл. М.С. Крихкого. – М.: Мир, 1988. – 187с.
P.S. Не судіть надто мою необізненість в справах астрономії, тому що формули з цієї програми виводились мною будучи 15- літнім хлопцем, коли в школі розпочинають вчити тригонометрію. Хто зацікавився даною програмою може звернутися на vetoo@mail.ru , я з задоволенням вишлю її вам на шару.