Rambler's Top100Astronet    
  po tekstam   po klyuchevym slovam   v glossarii   po saitam   perevod   po katalogu
 

Na pervuyu stranicu << 3. Rabota s ASCII | Oglavlenie | 5. Diagramma Gercshprunga-Ressela >>

Razdely


4. Postroenie raspredeleniya zvezd Hipparcos
na nebesnoi sfere i v prostranstve

4.1. Raspredelenie zvezd po nebesnoi sfere

S pomosh'yu Celestia 2000 mozhno postroit' kartinu raspredeleniya vyborki zvezd na nebesnoi sfere v neskol'kih proekciyah. Naibolee populyarnaya iz nih - eto proekciya Hammer-Aitofa, ona byla prinyata v kachestve osnovnoi v opisanii Hipparcos i ispol'zovalas' vo mnogih pervyh publikaciyah. Odnako graficheskie vozmozhnosti Celestia dovol'no ogranicheny. Naprimer, pri chisle zvezd bolee 1000 diagrammy stroyatsya ne tochkami, a zakrashennymi oblastyami, simvoliziruyushimi zvezdnuyu plotnost'. Eto chislo izmenit' nel'zya, a v diagramme s zalitymi oblastyami net legendy, po kotoroi mozhno bylo by ponyat' absolyutnoe znachenie zvezdnoi plotnosti v konkretnom meste. Otsutstvuyut vozmozhnosti vydeleniya cvetom zvezd po kakomu-libo kriteriyu. Po etim i mnogim drugim prichinam u issledovatelya vozniknet potrebnost' v samostoyatel'nom postroenii kartiny raspredeleniya zvezd po nebesnoi sfere.

Sleduyushie formuly opisyvayut proekciyu Hammer-Aitofa dlya sfericheskoi galakticheskoi sistemy koordinat:


(4.1)

zdes'

, - galakticheskie koordinaty, vyrazhennye v radianah, prichem dolgotu sleduet privesti v diapazon [-,+];

, - dekartovy koordinaty na ploskosti; budet nahodit'sya v diapazone [-1, +1], a - v diapazone [-2, +2], nachalo koordinat (0, 0) sootvetstvuet napravleniyu na centr Galaktiki.

Napishem programmu, kotoraya stroit izobrazheniya zvezd v etoi proekcii. V kachestve graficheskoi platformy ispol'zuem standartnuyu biblioteku BGI, realizaciya kotoroi est' v Borland Pascal, Free Pascal4.1, Borland C++. Ona nastol'ko prosta, chto dazhe nachinayushii programmist legko adaptiruet programmu, ispol'zuyushuyu BGI, pod lyubuyu druguyu sistemu. Os' v etom rezhime imeet napravlenie sleva napravo, a os' - sverhu vniz. Verhnii levyi ugol imeet koordinaty (0,0), a pravyi nizhnii (GetMaxX, GetMaxY). Etu sistemu koordinat v nashem izlozhenii my budem nazyvat' ekrannoi.

Dlya nachala napishem dve procedury Aitoff i Screen. Pervaya budet perevodit' sfericheskie galakticheskie koordinaty v dekartovy po formulam (4.1), a vtoraya - dekartovy v ekrannye.

Listing 4.1. Procedury perevoda koordinat

Procedure Aitoff(
l,b:double; { Sfericheskie koordinaty v radianah }
var x,y : double); { Dekartovy koordinaty }
var s : double;
begin
if l>Pi then l:=l-2*Pi; { Privedenie l v diapazon -Pi do +Pi }
s:=sqrt(1+cos(b)*cos(l/2)); { Znamenatel' formul 4.1 }
x:=-2*cos(b)*sin(l/2)/s;
y:=sin(b)/s;
end;
Procedure Screen
(x,y : double; { Dekartovy koordinaty }
X0,Y0: integer;{Ekrannye koordinaty nachala dekartovoi sistemy}
Scale: double;{Masshtab - skol'ko tochek ekrana na edinicu dliny}
var u,v : integer);{ Ekrannye koordinaty }
begin
u:=X0+Round(Scale*x);
v:=Y0-Round(Scale*y);
end;

Neskol'ko gromozdkoi mozhet pokazat'sya procedura, otrisovyvayushaya koordinatnuyu setku, no nikakih algoritmicheskih slozhnostei v nei net.

Listing 4.2. Procedura, risuyushaya koordinatnuyu setku.

function rad(x:double):double; { Perevod gradusov v radiany }
begin
rad:=x/180.0*Pi;
end;
Procedure AitoffGrid
(Step:integer; { Shag setki v gradusah }
X0,Y0 : integer; { Ekrannye koordinaty centra proekcii }
Scale : double; { Masshtab - tochek na edinicu dliny }
Gr : boolean); {Flag - v gradusah ili v chasah razmetka dolgoty}
var i,j : integer; { Peremennye ciklov for }
l,b : double; { Galakticheskie koordinaty }
x,y : double; { Dekartovy koordinaty }
u,v : integer; { Ekrannye koordinaty }
s : string[5]; { Stroka dlya podpisei }
h : integer; { Dlya razmetki osei }
begin
{ Nanesenie setki meridianov }
i:=-180; {Pervyi meridian -180 gradusov }
repeat { Cikl po meridianam }
l:=rad(i); { Perevod v radiany }
j:=-90; { Pervaya tochka meridiana }
repeat { Cikl postroeniya vdol' meridiana }
{ Vychislenie tochki meridiana }
b:=rad(j); { Perevod v radiany shiroty }
Aitoff(l,b,x,y); { Perevod v dekartovy koordinaty }
Screen(x,y,X0,Y0,scale,u,v); { Perevod v ekrannye koord. }
{ Esli tochka pervaya (j=-90), to pomeshaem graficheskii kursor
v tochku (u,v) funkciei MoveTo, esli tochka ne pervaya, to
?procherchivaem? kursorom liniyu iz predydushei tochki
v tochku (u,v) funkciei LineTo
}
if j=-90 then MoveTo(u,v) else LineTo(u,v);
j:=j+5; { Shag 5 gradusov obespechivayut gladkii vid meridiana }
until j>90;
i:=i+step; { Perehod k sleduyushemu meridianu }
until i>180;
{ Nanesenie setki parallelei - analogichno predydushemu }
j:=-90;
repeat { cikl po parallelyam }
b:=rad(j);
i:=-180;
repeat { cikl postroeniya vdol' paralleli }
l:=rad(i);
Aitoff(l,b,x,y);
Screen(x,y,X0,Y0,scale,u,v);
if i=-180 then MoveTo(u,v) else LineTo(u,v);
i:=i+5;
until i>180;
j:=j+step;
until j>90;
{ Zadanie svoistv shrifta (mozhet zaviset' ot graf.bibl.) }
SetTextStyle(DefaultFont,HorizDir,1);
SetTextJustify(LeftText,BottomText);
{ Podpisi meridianov vdol' ekvatora }
i:=-180;
repeat
{ Vychislenie koordinaty tochki vyvoda nadpisi }
l:=Rad(i);
Aitoff(l,0,x,y);
Screen(x,y,X0,Y0,scale,u,v);
{ Esli Gr istina, to razmetka v gradusah, inache - v chasah }
if Gr then h:=i
elsebegin h:=i div 15; if h<0 then h:=h+24;
end;
Str(h,s); { Preobrazovanie znacheniya h v tekstovuyu stroku }
OutTextXY(u+5,v-5,s); { Vyvod tekstovoi stroki }
i:=i+step; { Perehod k sleduyushemu meridianu }
until i>180;
{ Izmenenie vyravnivaniya teksta }
SetTextJustify(RightText,BottomText);
{ Podpisi parallelei vdol' nulevogo meridiana - analogichno }
j:=-90+step;
repeat
if j<>0 then { Ekvator ne podpisyvaem }
begin
b:=Rad(j);
Aitoff(0,b,x,y);
Screen(x,y,X0,Y0,scale,u,v);
Str(j,s);
OutTextXY(u-5,v-5,s);
end;
j:=j+step;
until j>90-step;
end;

Esli my hotim postroit' proekcii zvezd Hipparcos v galakticheskoi sisteme koordinat, to nam neobhodimo perevesti ekvatorial'nye koordinaty, privedennye v kataloge, v galakticheskie. Eto mozhno sdelat' po formulam

(4.1)

a listing 4.3 predstavlyaet realizaciyu etih formul.

Zdes'
- ekvatorial'nye koordinaty;
 = 62 52' 18.295? - naklon galakticheskogo ekvatora;
 51' 34.131? dolgota voshodyashego uzla galakticheskogo ekvatora;
L= 32 55' 54.905? - dolgota napravleniya na centr Galaktiki;
- galakticheskie koordinaty.
Znacheniya konstant privedeny na epohu J1991.25. Vo vtoroi formule podrazumevaetsya krugovoi arktangens - chislitel' interpretiruetsya kak sinus ugla, a znamenatel' - kak kosinus.
V standartnoi biblioteke Pascal mogut otsutstvovat' funkcii arcsin, arctan2, poetomu my sochli celesoobraznym takzhe pomestit' zdes' kod etih funkcii.
Listing 4.3. Perevod ekvatorial'nyh koordinat v galakticheskie
Function ArcTan2(x,y:double):double;
var z:double;
begin
if y<>0 then z:=arctan(x/y)
else z:=Pi/2;
if y<0 then z:=z+Pi;
ArcTan2:=z;
end;
Function ArcSin(x:double):double;
begin
ArcSin:=ArcTan2(x,sqrt(1-sqr(x)));
end;
Procedure Galaxy(a,d : double; var l,b : double);
Var sa,ca,sd,cd : double;
Const Leo = 4.936829261; { 282.85948083}
L0 = 0.57477039907; { 32.931918056 }
si = 0.88998807641; { sin 62.871748611 }
ci = 0.45598379779; { cos 62.871748611 }
begin
a:=a-Leo;
sa:=sin(a); ca:=cos(a);
sd:=sin(d); cd:=cos(d);
b:=arcsin(sd*ci-cd*si*sa);
l:=arctan2(sd*si+cd*ci*sa,cd*ca)+L0;
end;

Nakonec, pereidem k glavnoi programme. Reshim takuyu zadachu: otobrazit' raspredelenie zvezd po nebesnoi sfere I i II klassa svetimosti, prichem zvezdy spektral'nyh klassov O, B vydelit' sinim cvetom, A - golubym, F, G - zheltym, K, M - krasnym. Dlya otbora zvezd ispol'zuem programmu Celestia i vyberem zvezdy s klassom svetimosti ot Ia0-a do IIb (ris. 4.1). Vsego dolzhno byt' naideno 2248 zvezd. Sohranim vyborku (Sample) v fail I-II.txt (ris. 4.2).

Tekst programmy, vypolnyayushei postroenie raspredelenie zvezd po nebesnoi sfere, priveden v listinge 4.4, a rezul'tat ee raboty - na ris. 4.3.

V osnovnom cikle while proishodit chtenie dannyh o zvezde, proverka, udovletvoryaet li zvezda kriteriyu otbora, opredelenie cveta vyvoda tochki v operatore case. Dalee proishodit preobrazovanie koordinat v galakticheskie, zatem v dekartovy koordinaty proekcii i v ekrannye koordinaty. Dlya prostoty izlozheniya my stavim tochku proceduroi PutPixel, no mozhno narisovat' i druguyu geometricheskuyu figuru (romb, krug).


Ris. 4.1. Sozdanie kriteriya otbora zvezd po klassam svetimosti.

Ris. 4.2. Sohranenie vyborki v fail.

Ris. 4.3. Raspredelenie zvezd klassov svetimosti I-II po nebesnoi sfere.

Listing 4.4. Postroenie raspredeleniya zvezd po nebesnoi sfere
Program Picture;
Uses Graph, HipMain, Projection;
{ V modul' Projection sobrany vse predydushie podprogrammy }
var s : THipparcos;
driver,mode : integer; { Dlya inicializacii grafich. rezhima }
color : integer; { Cvet tochki }
l, b : double; { Galakticheskie koordinaty }
x, y : double; { Dekartovy koordinaty }
u, v : integer; { Ekrannye koordinaty }
CX, CY : integer;{ Ekrannye koordinaty centra proekcii }
SC : integer;{Masshtab perevoda dekartovyh koord. v ekrannye}
begin
{ Inicializaciya graficheskogo rezhima }
Driver:=detect; Mode:=0; InitGraph(Driver,Mode,'D:/BP/BGI');
{ Zadanie masshtaba i centra }
{ Proekciya Aitofa imeet X v diapazone ot -2 do 2, i zazor }
SC:=GetMaxX div 4 -10;
CX:=GetMaxX div 2; CY:=GetMaxY div 2;
AitoffGrid(30,CX,CY,SC,True); { Vyvod setki koordinat }
OpenHipparcosMain; { Otkrytie kataloga i }
InitCriteria('I-II.txt'); { inicializaciya kriteriya }
while ReadHipparcosMain(s) do { Cikl chteniya zvezd }
if inCelestia(s.HIP) then { Proverka kriteriya }
begin
case s.SP[0] of { Opredelenie cveta zvezdy }
'O','B': color:=LightBlue;
'A' : color:=LightCyan;
'F','G': color:=Yellow;
'K','M': color:=LightRed;
else color:=LightGray;
end; { case }
{ Perevod ekvatorial'nyh koordinat v radiany, a zatem
v galakticheskie koordinaty
}
Galaxy(rad(s.RADeg),rad(s.DEDeg),l,b);
{ Vychislenie dekartovyh koordinat proekcii Aitofa }
Aitoff(l,b,x,y);
Screen(x,y,CX,CY,SC,u,v); { Perevod v ekrannye koordinaty }
PutPixel(u,v,color);{Postavit' tochku (mozhno zamenit' na krug)}
end; { if i while }
ClearCriteria;
CloseHipparcosMain;
end.

4.2. Raspredelenie zvezd v prostranstve

Znanie parallaksov daet vozmozhnost' poluchit' vse tri prostranstvennyh koordinaty zvezdy kataloga Hipparcos. S pomosh'yu neslozhnyh programm mozhno postroit' vizualizaciyu zadannoi vyborki zvezdy v prostranstve.

Naprimer, postroim raspredelenie v prostranstve zvezd spektral'nyh klassov O-B5, kotorye nahodyatsya k nam blizhe 500 pk i imeyut otnositel'nuyu tochnost' opredeleniya parallaksa luchshe, chem 50%. Listing 4.5 formiruet tekstovyi fail, gde v tri kolonki idut pryamougol'nye galakticheskie koordinaty zvezd , , .

Hotya zadachu vizualizacii takogo massiva mozhno realizovat' i samostoyatel'no, no dlya resheniya podobnogo roda zadach sushestvuet bol'shoe chislo matematicheskih programm. My vospol'zuemsya populyarnoi i dostatochno prostoi v osvoenii programmoi MathCAD (goditsya lyubaya versiya starshe 6.0). Vid ekrana programmy MathCAD vmeste s tekstom postroeniya tochechnogo grafika predstavlen na ris. 4.4. Pervyi operator M:=READPRN(?O-B5.DAT?) schityvaet v matricu M soderzhimoe faila, sformirovannogo nashei programmoi. Posleduyushie tri operatora zadayut tri vektora, kotorye yavlyayutsya stolbcami etoi matricy. Dalee s pomosh'yu komandy menyu Insert-Graph-3D Scatter Plot my stroim neobhodimuyu kartinu raspredeleniya zvezd v prostranstve, s kotoroi mozhno proizvodit' raznye operacii: vrashenie, izmenenie masshtaba, perspektivy, dobavlenie "tumana" i pr.
Listing 4.5. Formirovanie pryamougol'nyh koordinat zvezd
Program Plot3D;
Uses HipMain,Projection;
Const Criteria = 'O-B5'; { Imya faila kriteriya }
n : integer = 0; { Schetchik }
var s : THipparcos;
r : double; { Rasstoyanie }
l, b : double; { Galakticheskie koordinaty }
x,y,z : double; { Dekartovy galakticheskie koordinaty }
f : text; { Fail vyvoda rezul'tatov }
begin
{ Vyhodnoi fail imeet rasshirenie .DAT }
assign(f,Criteria+'.DAT'); Rewrite(f);
OpenHipparcosMain;
{ Fail spiska zvezd imeet rasshirenie .TXT }
writeln(InitCriteria(Criteria+'.txt'),' zvezd v kriterii.');
while ReadHipparcosMain(s) do
begin
{ net dannyh o parallakse }
if (s.info and NoPlx)<>0 then continue;
{ "plohoe" znachenie parallaksa }
if s.plx<=0.0 then continue;
{ nizkaya tochnost' parallaksa }
if s.sigma.plx/s.plx>0.5 then continue;
if inCelestia(s.HIP) then
begin
r:=1000.0/s.plx; { Vychislenie rasstoyaniya v pk }
if r>500.0 then continue; { Otbros dalekih zvezd }
{ Perevod v galakticheskie koordinaty }
Galaxy(rad(s.RADeg),rad(s.DEDeg),l,b);
x:=r*cos(b)*cos(l); { Vychislenie pryamougol'nyh }
y:=r*cos(b)*sin(l); { galakticheskih koordinat }
z:=r*sin(b);
writeln(f,x:10:2,y:10:2,z:10:2); { Vyvod v fail }
inc(n); { Uvelichenie schetchika na edinicu }
end; { if }
end; { while }
ClearCriteria;
CloseHipparcosMain;
Close(f);
writeln(n,' zvezd obrabotano.');
end.


Ris. 4.4. Tochechnyi grafik raspredeleniya zvezd v prostranstve, postroennyi programmoi MathCAD.


Ris. 4.5. Razlichnye rakursy raspredeleniya zvezd v prostranstve.



<< 3. Rabota s ASCII | Oglavlenie | 5. Diagramma Gercshprunga-Ressela >>

Publikacii s klyuchevymi slovami: astrometriya - katalogi - Hipparcos
Publikacii so slovami: astrometriya - katalogi - Hipparcos
Sm. takzhe:
Vse publikacii na tu zhe temu >>

Ocenka: 3.0 [golosov: 99]
 
O reitinge
Versiya dlya pechati Raspechatat'

Astrometriya - Astronomicheskie instrumenty - Astronomicheskoe obrazovanie - Astrofizika - Istoriya astronomii - Kosmonavtika, issledovanie kosmosa - Lyubitel'skaya astronomiya - Planety i Solnechnaya sistema - Solnce


Astronet | Nauchnaya set' | GAISh MGU | Poisk po MGU | O proekte | Avtoram

Kommentarii, voprosy? Pishite: info@astronet.ru ili syuda

Rambler's Top100 Yandeks citirovaniya