REM A display of our night sky REM REM It requires databases of the form: REM StarID XPOS YPOS ZPOS Abs Magnitude REM ******************************************************** skyview() exit sub skyview() nstars=0 local starsky(35000,5) local skyfield(5000,3) FOVsky=20 clear screen open window 400, 300 fill clear rectangle 20, 40 to 375, 400 Text 30, 100, "Stellar Databases" rectangle 25,103 to 300, 220 rectangle 27, 105 to 298,218 text 30, 130, "1-- Small - 1,400 stars (fast)" text 30, 170,"2-- Medium - 12,000 stars " do TEXT 20, 275, "Please Select a database" db$=inkey$(1) fill clear rectangle 10, 275 to 200, 250 if (db$<>"") break db$=inkey$(1) if (db$<>"") break loop close window stardb=open("subset.dat", "r") switch db$ case "1":stardb=open("subset.dat", "r"):break case "2":stardb=open("star.dat", "r"):break end switch$ Print "LOADING DATABASE" while(!eof(stardb)) nstars=nstars+1 for a=1 to 5:input #stardb starsky(nstars,a):next a wend close stardb sDEC=0 sRA=0 CLEAR SCREEN open window 550, 570 circle 97,552,2 circle 191,552,2 text 10, 565, "Arrow keys= 5 A,S,Z,W = 1 + = zoom in - = zoom out" Text 445, 565, "esc = quit" rectangle 9, 19 to 541, 541 rectangle 10, 20 to 540, 540 leave=false goto begin label start direct$=inkey$ fill clear rectangle 0, 19 to 550, 0 switch direct$: case "right": sRA=sRA-5:break case "left": sRA=sRA+5:break case "up": sDEC=sDEC-5:break case "down":sDEC=sDEC+5:break case "s": sRA=sRA-1:break case "a": sRA=sRA+1:break case "w": sDEC=sDEC-1:break case "z":sDEC=sDEC+1:break case "S": sRA=sRA-1:break case "A": sRA=sRA+1:break case "W": sDEC=sDEC-1:break case "Z":sDEC=sDEC+1:break case "-":FOVsky=FOVsky+1:break case "=":FOVsky=FOVsky-1:break case "esc": leave=true:break end switch if leave goto ending label begin solRA=sRA*3.1415/180 solDEC=sDEC*3.1415/180 fovsky=FOVsky*pi/180 x=cos(solRA)*cos(solDEC) y=sin(solRA)*cos(solDEC) z=sin(solDEC) Text 215, 20, "RA: ": Text 245, 20, str$(sRA) Text 10, 20, "Decl: ": Text 50, 20, str$(sDEC) Text 415, 20, "stars: ": Text 455, 20, str$(skycount) Text 300, 20, "FOV: ":Text 335,20, str$(FOVsky) magxyz=sqrt(x^2+y^2+z^2) skycount=0 For target= 1 to nstars xtarg=starsky(target,3):ytarg=starsky(target,2):ztarg=starsky(target,4) ax=(xtarg*x+ytarg*y+ztarg*z)/magxyz theta=acos((ax/sqrt(xtarg^2+ytarg^2+ztarg^2))) if (abs(theta)<1.5*fovsky) then ay=(xtarg*y-ytarg*x)/sqrt(y^2+x^2) az=(xtarg*x*z+ytarg*z*y-ztarg*(x^2+y^2))/sqrt(x*x*z*z+(x*x+y*y)^2+y*y*z*z) distance=sqrt(xtarg^2+ytarg^2+ztarg^2) RA=atan(ay/ax) Decl=atan(az,sqrt(ax^2+ay^2)) if ((abs(RA)0) then skycount=skycount+1 skyfield(skycount,1)=-RA skyfield(skycount,2)=-Decl skyfield(skycount,3)=starsky(target,5)-5+5*log(distance)/log(10) if (skyfield(skycount,3)>6) skyfield(skycount,3)=6 endif endif next target fill rectangle 11, 21 to 539, 539 clear circle 500, 62, 40 clear circle 500, 62, 25 clear line 500-40*cos(4*solRA),62-40*sin(4*solRA) to 500+40*cos(4*solRA),62+40*sin(4*solRA) clear line 500-40*cos(4*solRA+pi/6),62-40*sin(4*solRA+pi/6) to 500+40*cos(4*solRA+pi/6),62+40*sin(4*solRA+pi/6) fill circle 500, 62, 24 clear line 500-25*cos(4*solDEC),62-25*sin(4*solDEC) to 500+25*cos(4*solDEC),62+25*sin(4*solDEC) clear line 500-25*cos(4*solDEC+pi/6),62-25*sin(4*solDEC+pi/6) to 500+25*cos(4*solDEC+pi/6),62+25*sin(4*solDEC+pi/6) clear circle 500, 62, 14 fill circle 500, 62, 13 CLEAR CIRCLE 500,62, FOVsky/3 clear circle 500,62,FOVsky/6 for a=1 to skycount size=6-skyfield(a,3) clear dot 275+250*skyfield(a,1)/fovsky, 275-250*skyfield(a,2)/fovsky fill clear circle 275+250*skyfield(a,1)/fovsky, 275-250*skyfield(a,2)/fovsky, size next a goto start label ending close window end sub