REM ** GLOBAL VARIABLES ** DIM ST,MC,ASD,VX DIM GL(9),GB(9),HL(9),HB(9),MOON,MOONLAT,MOONNODE DIM RAV(9),X6(9),Y6(9),Z6(9) DIM RA,Mj,Ms,Mu DIM T DIM LA DIM L5 DIM F DIM PI DIM TINY DIM S,A,R,X,Y,JC DIM PL(9,15) sub testing_onclick CALL MAIN CALL JULIAN CALL ANGLES CALL PLANETS CALL LUNAR CALL PRESENT end sub SUB MAIN PI=3.141592653589793 TINY=.000000000000001 PL(0,0)=358.47584 PL(0,1)=35999.0498 PL(0,2)=-0.00015 PL(0,3)=0.016751 PL(0,4)=-0.000041 PL(0,5)=0 PL(0,6)=1.00000013 PL(0,7)=101.22083 PL(0,8)=1.71918 PL(0,9)=0.00045 PL(0,10)=0 PL(0,11)=0 PL(0,12)=0 PL(0,13)=0 PL(0,14)=0 PL(0,15)=0 PL(1,0)=102.27938 PL(1,1)=149472.515 PL(1,2)=0 PL(1,3)=0.205614 PL(1,4)=0.00002 PL(1,5)=0 PL(1,6)=0.387098 PL(1,7)=28.75375 PL(1,8)=0.37028 PL(1,9)=0.00012 PL(1,10)=47.14594 PL(1,11)=1.1852 PL(1,12)=0.00017 PL(1,13)=7.00288 PL(1,14)=0.00186 PL(1,15)=-0.00001 PL(2,0)=212.60322 PL(2,1)=58517.8039 PL(2,2)=0.00129 PL(2,3)=0.00682 PL(2,4)=-0.00004 PL(2,5)=0 PL(2,6)=0.723332 PL(2,7)=54.38419 PL(2,8)=0.50819 PL(2,9)=-0.00139 PL(2,10)=75.77965 PL(2,11)=0.89985 PL(2,12)=0.00041 PL(2,13)=3.39363 PL(2,14)=0.001 PL(2,15)=0 PL(3,0)=319.5293 PL(3,1)=19139.8585 PL(3,2)=0.00018 PL(3,3)=0.09331 PL(3,4)=0.00009 PL(3,5)=0 PL(3,6)=1.52369 PL(3,7)=285.43176 PL(3,8)=1.06977 PL(3,9)=0.00013 PL(3,10)=48.78644 PL(3,11)=0.77099 PL(3,12)=0 PL(3,13)=1.85033 PL(3,14)=-0.00068 PL(3,15)=0.00001 PL(4,0)=225.32833 PL(4,1)=3034.69202 PL(4,2)=-0.00072 PL(4,3)=0.04833 PL(4,4)=0.00016 PL(4,5)=0 PL(4,6)=5.202561 PL(4,7)=273.27754 PL(4,8)=0.59943 PL(4,9)=0.0007 PL(4,10)=99.44338 PL(4,11)=1.01053 PL(4,12)=0.00035 PL(4,13)=1.30874 PL(4,14)=-0.005696 PL(4,15)=0 PL(5,0)=175.46622 PL(5,1)=1221.55147 PL(5,2)=-0.0005 PL(5,3)=0.05589 PL(5,4)=-0.00035 PL(5,5)=0 PL(5,6)=9.55475 PL(5,7)=338.30777 PL(5,8)=1.08522 PL(5,9)=0.00098 PL(5,10)=112.79039 PL(5,11)=0.873195 PL(5,12)=-0.00015 PL(5,13)=2.49252 PL(5,14)=-0.00392 PL(5,15)=-0.00002 PL(6,0)=72.64882 PL(6,1)=428.37911 PL(6,2)=0.00008 PL(6,3)=0.046344 PL(6,4)=-0.00003 PL(6,5)=0 PL(6,6)=19.21814 PL(6,7)=98.07155 PL(6,8)=0.98577 PL(6,9)=-0.00107 PL(6,10)=73.4771 PL(6,11)=0.49867 PL(6,12)=0.00131 PL(6,13)=0.77246 PL(6,14)=0.00063 PL(6,15)=0.00004 PL(7,0)=37.73067 PL(7,1)=218.46134 PL(7,2)=-0.00007 PL(7,3)=0.008997 PL(7,4)=0 PL(7,5)=0 PL(7,6)=30.10957 PL(7,7)=276.04597 PL(7,8)=0.32564 PL(7,9)=0.00014 PL(7,10)=130.68136 PL(7,11)=1.09894 PL(7,12)=0.000249 PL(7,13)=1.77924 PL(7,14)=-0.00954 PL(7,15)=0 PL(8,0)=229.94722 PL(8,1)=144.91306 PL(8,2)=0 PL(8,3)=0.24864 PL(8,4)=0 PL(8,5)=0 PL(8,6)=39.51744 PL(8,7)=113.52139 PL(8,8)=0 PL(8,9)=0 PL(8,10)=108.95444 PL(8,11)=1.39601 PL(8,12)=0.00031 PL(8,13)=17.14678 PL(8,14)=0 PL(8,15)=0 PL(9,0)=260.75 PL(9,1)=96.89531 PL(9,2)=0 PL(9,3)=.0542 PL(9,4)=0 PL(9,5)=0 PL(9,6)=51.72 PL(9,7)=296.2 PL(9,8)=0 PL(9,9)=0 PL(9,10)=106.37 PL(9,11)=1.39 PL(9,12)=0 PL(9,13)=1.58 PL(9,14)=0 PL(9,15)=0 END SUB SUB JULIAN YY=yearnumber.selectedindex +1900 MM=monthnumber.selectedindex +1 DD=daynumber.selectedindex+1 F=hournumber.selectedindex/24 +minutenumber.selectedindex/1440 -(gmtnumber.selectedindex-12)/24 JD=367*YY-INT(7*(YY+INT((MM+9)/12))/4) JD=JD+INT(275*MM/9)+DD+1721013.5 JD=JD-.5*SGN(100*YY+MM-190002.5)+.5 T=(JD-2415020)+F T=T/36525 REM ** 1/3/1800 - 28/2/2100 ONLY ** REM ** EPOCH 1900 JAN 0 AT 12 HRS ** END SUB SUB ANGLES LX=latDEGRree.selectedindex LY=latminute.selectedindex LS=northsouth.selectedindex LA = RAD(LX + LY / 60) IF LA = 0 THEN LA = LA + TINY IF LS=1 THEN LA=-LA REM ** LAT IN RADIANS, SOUTH NEGATIVE ** L3=longDEGRree.selectedindex L4=longminute.selectedindex LOS=eastwest.selectedindex L5 = L3 + L4 / 60 IF LOS=0 THEN L5=-L5 REM ** LONG IN DEGREES, EAST NEGATIVE ** OB = RAD(23.452294 - .0130125 * T) RA = (6.6460656 + 2400.0513 * T + .0000258 * T * T + (F * 24)) * 15 - L5 WHILE RA > 360 RA = RA - 360 WEND RA = RAD(RA): R1 = RA ST = DEGR(R1) / 15 MC = ATN(SIN(RA) / (COS(RA) * COS(OB))) IF MC < 0 THEN MC = MC + PI IF SIN(RA) < 0 THEN MC = MC + PI ASD = ATN(COS(RA) / -(SIN(OB) * TAN(LA) + COS(OB) * SIN(RA))) IF ASD < 0 THEN ASD = ASD + PI IF COS(RA) < 0 THEN ASD = ASD + PI QX = COS(RA + PI) QY = -SIN(RA + PI) * COS(OB) - SIN(OB) / TAN(LA) IF ABS(QY) < TINY THEN QY = QY + TINY * SGN(QY) IF QY = 0 THEN QY = TINY VX = ATN(QX / QY) IF VX < 0 THEN VX = VX + PI IF QX < 0 THEN VX = VX + PI REM ** ANGLES IN MC,ASD,VX IN RADIANS ** END SUB REM 971 SUB PLANETS Mj=RAD(PL(4,0)+PL(4,1)*T+PL(4,2)*T*T) Ms=RAD(PL(5,0)+PL(5,1)*T+PL(5,2)*T*T) Mu=RAD(PL(6,0)+PL(6,1)*T+PL(6,2)*T*T) FOR I = 0 TO 9 JC = -1: CALL ASSEMBLE(I) M = FNP(S) CALL ASSEMBLE(I) E = DEGR(S): EA = M FOR K = 1 TO 10: EA = M + E * SIN(EA): NEXT IF DEGR(EA) > 179.9999 AND DEGR(EA) < 180.0001 THEN FF = EA IF DEGR(EA) <= 179.9999 OR DEGR(EA) >= 180.0001 THEN E1 = EA / 2: E1 = TAN(E1) * SQR((1 + E) / (1 - E)): FF = ATN(E1): FF = 2 * FF: IF FF < 0 THEN FF = FF + 2 * PI JC = 6: AU = PL(I, JC):RV = AU * (1 - E * COS(EA)):RAV(I)=RV CALL ASSEMBLE(I) AP = FNP(S) CALL ASSEMBLE(I) AN = FNP(S) CALL ASSEMBLE(I) QI = FNP(S) X = RV * (COS(AN) * COS(AP + FF) - SIN(AN) * SIN(AP + FF) * COS(QI)) Y = RV * (SIN(AN) * COS(AP + FF) + COS(AN) * SIN(AP + FF) * COS(QI)) Z = RV * SIN(AP + FF) * SIN(QI) X6(I)=X:Y6(I)=Y:Z6(I)=Z IF Y = 0 THEN Y = TINY TH = ATN(Y / X): IF TH < 0 THEN TH = TH + PI IF Y < 0 THEN TH = TH + PI LT = ASN(Z / RV) HL(I) = TH: HB(I) = LT IF I = 4 THEN HL(I) = FNP(HL(I) - RAD(.332) * SIN(2 * Mj - 5 * Ms - RAD(67.6))) IF I = 4 THEN HL(I) = FNP(HL(I) - RAD(.056) * SIN(2 * Mj - 2 * Ms + RAD(21))) IF I = 4 THEN HL(I) = FNP(HL(I) + RAD(.042) * SIN(3 * Mj - 5 * Ms + RAD(21))) IF I = 4 THEN HL(I) = FNP(HL(I) - RAD(.036) * SIN(Mj - 2 * Ms)) IF I = 4 THEN HL(I) = FNP(HL(I) + RAD(.022) * COS(Mj - Ms)) IF I = 4 THEN HL(I) = FNP(HL(I) + RAD(.023) * SIN(2 * Mj - 3 * Ms + RAD(52))) IF I = 4 THEN HL(I) = FNP(HL(I) - RAD(.016) * SIN(Mj - 5 * Ms - RAD(69))) IF I = 4 THEN X9=X6(I):Y9=Y6(I):R9=SQR(X9*X9+Y9*Y9):X6(I) = R9 * COS(HL(I)): Y6(I) = R9 * SIN(HL(I)) IF I = 5 THEN HL(I) = FNP(HL(I) + RAD(.812) * SIN(2 * Mj - 5 * Ms - RAD(67.6))) IF I = 5 THEN HL(I) = FNP(HL(I) - RAD(.229) * COS(2 * Mj - 4 * Ms - RAD(2))) IF I = 5 THEN HL(I) = FNP(HL(I) + RAD(.119) * SIN(Mj - 2 * Ms - RAD(3))) IF I = 5 THEN HL(I) = FNP(HL(I) + RAD(.046) * SIN(2 * Mj - 6 * Ms - RAD(69))) IF I = 5 THEN HL(I) = FNP(HL(I) + RAD(.014) * SIN(Mj - 3 * Ms + RAD(32))) IF I = 5 THEN HB(I) = FNP(HB(I) - RAD(.02) * COS(2 * Mj - 4 * Ms - RAD(2))) IF I = 5 THEN HB(I) = FNP(HB(I) + RAD(.018) * SIN(2 * Mj - 6 * Ms - RAD(49))) IF I = 5 THEN X9=X6(I):Y9=Y6(I):R9=SQR(X9*X9+Y9*Y9):X6(I) = R9 * COS(HL(I)): Y6(I) = R9 * SIN(HL(I)) IF I = 6 THEN HL(I) = FNP(HL(I) + RAD(.04) * SIN(Ms - 2 * Mu + RAD(6))) IF I = 6 THEN HL(I) = FNP(HL(I) + RAD(.035) * SIN(Ms - 3 * Mu + RAD(33))) IF I = 6 THEN HL(I) = FNP(HL(I) - RAD(.015) * SIN(Mj - Mu + RAD(20))) IF I = 6 THEN X9=X6(I):Y9=Y6(I):R9=SQR(X9*X9+Y9*Y9):X6(I) = R9 * COS(HL(I)): Y6(I) = R9 * SIN(HL(I)) REM *** IF I = 0 THEN EE = RV: AC = HL(0) X=X6(I):Y=Y6(I):Z=Z6(I) IF I = 0 THEN XG = X: YG = Y: ZG = Z IF I = 0 THEN XE = -X: YE = -Y: ZE = -Z X = X - XG: Y = Y - YG: Z = Z - ZG IF I = 0 THEN GL(0) = HL(0) + PI: GB(0) = 0: IF GL(0) > 2 * PI THEN GL(0) = GL(0) - 2 * PI IF I=0 THEN GL(0)=DEGR(GL(0)) IF I>0 THEN IF ABS(X) < TINY THEN X = TINY * SGN(X): IF X = 0 THEN X = TINY IF I>0 THEN IF ABS(Y) < TINY THEN Y = TINY * SGN(Y): IF Y = 0 THEN Y = TINY IF I>0 THEN EL = ATN(Y / X): IF EL < 0 THEN EL = EL + PI IF I>0 THEN IF Y < 0 THEN EL = EL + PI IF I>0 THEN GL(I) = DEGR(EL) IF I>0 THEN GBL = ATN(Z / SQR(X * X + Y * Y)) IF I>0 THEN GB(I) = DEGR(GBL) IF I = 6 THEN GL(I) = FNU(GL(I) - (.85 - .05 * T - .2 * COS(T * 2 * PI / .84 + .6) + .05 * COS(T * 2 * PI / .0101 + 2.7))) IF I = 7 THEN GL(I) = FNU(GL(I) - (-.55 + .07 * SIN(T * 2 * PI / 1.76))) IF I = 8 THEN IF T > .61 THEN GL(I) = FNU(GL(I) - (-(.4 * (T - 1.61) + .4) - .04 * SIN((T - .61) * 2 * PI / 2.48))) NEXT END SUB SUB LUNAR LL = 973563 + 1732564379 * T - 4 * T * T M = 3600 G = 1012395 + 6189 * T N = 933060 - 6962911 * T + 7.5 * T * T: MNOD = FNU(FNL(N)): REM ** MEAN LUNAR NODE ** G1 = 1203586 + 14648523 * T - 37 * T * T D = 1262655 + 1602961611 * T - 5 * T * T L = (LL - G1) / M: L1 = ((LL - D) - G) / M: F = (LL - N) / M: D = D / M: Y = 2 * D ML = 22639.6 * FNZ(L) - 4586.4 * FNZ(L - Y) ML = ML + 2369.9 * FNZ(Y) + 769 * FNZ(2 * L) - 669 * FNZ(L1) ML = ML - 411.6 * FNZ(2 * F) - 212 * FNZ(2 * L - Y) ML = ML - 206 * FNZ(L + L1 - Y) + 192 * FNZ(L + Y) ML = ML - 165 * FNZ(L1 - Y) + 148 * FNZ(L - L1) - 125 * FNZ(D) ML = ML - 110 * FNZ(L + L1) - 55 * FNZ(2 * F - Y) ML = ML - 45 * FNZ(L + 2 * F) + 40 * FNZ(L - 2 * F) G = FNU((LL + ML) / M): REM ** LUNAR LONGITUDE ** MB = 18461.5 * FNZ(F) + 1010 * FNZ(L + F) - 999 * FNZ(F - L) MB = MB - 624 * FNZ(F - Y) + 199 * FNZ(F + Y - L) MB = MB - 167 * FNZ(L + F - Y) + 117 * FNZ(F + Y) MB = MB + 62 * FNZ(2 * L + F) - 33 * FNZ(F - Y - L) MB = MB - 32 * FNZ(F - 2 * L) - 30 * FNZ(L1 + F - Y) MB = FNL(MB): REM ** LUNAR LATITUDE ** TN = N + 5392 * FNZ(2 * F - Y) - 541 * FNZ(L1) - 442 * FNZ(Y) TN = TN + 423 * FNZ(2 * F) - 291 * FNZ(2 * L - 2 * F) TN = FNU(TN / M): REM ** TRUE LUNAR NODE ** M = QQM MOON=G:MOONLAT=MB:MOONNODE=TN END SUB SUB PRESENT DIM TEXT(18) DIM ZOD DIM PLA DIM PLONG(14),PLAT(14) PLONG(0)=GL(0):PLAT(0)=GB(0) PLONG(1)=MOON:PLAT(1)=MOONLAT FOR I=2 TO 10 PLONG(I)=GL(I-1):PLAT(I)=GB(I-1) NEXT PLONG(11)=MOONNODE PLONG(12)=DEGR(ASD) PLONG(13)=DEGR(MC) PLONG(14)=DEGR(VX) REM COPYRIGHT DR. ANDREW K. BLACK 1983-1998 PLA="The Sun The Moon Mercury Venus Mars Jupiter Saturn Uranus Neptune Pluto Zed True Node Ascendant Midheaven Vertex " TEXT(0)= "PLANET LONGITUDE LATITUDE" TEXT(1)= "" FOR I=2 TO 12 TEXT(I)=MID(PLA,I*10-19,10)+DMS(PLONG(I-2))+" "+DMSLAT(PLAT(I-2)) NEXT TEXT(13)="" TEXT(14)="True Node "+DMS(PLONG(11))+" "+DMSLAT(PLAT(11)) TEXT(15)="" FOR I=16 TO 18 TEXT(I)=MID(PLA,I*10-39,10)+DMS(PLONG(I-4)) NEXT OUTPUTSTRING ="" FOR I=0 TO 18 OUTPUTSTRING=OUTPUTSTRING+" "+TEXT(I)+VBCRLF NEXT test.value=OUTPUTSTRING REM Achernar REM Dr. Andrew K. Black END SUB FUNCTION DMS (DEGREE) DMS = "" DEGREEEE = INT(DEGREE) REST = FRAC(DEGREE) MINUTES = INT(REST * 60+.5) ZOD = " ARI TAU GEM CAN LEO VIR LIB SCO SAG CAP AQU PIS " SIGNUM = INT(DEGREEEE / 30) + 1 SIGN = MID(ZOD, SIGNUM * 5 - 4, 5) DEGREEEE = DEGREEEE - 30 * (SIGNUM - 1) DG = PADZERO(CSTR(DEGREEEE)) MG = PADZERO(CSTR(MINUTES)) DMS = DG + SIGN + MG END FUNCTION FUNCTION DMSLAT (DEGREE) SIGN = "N" IF DEGREE < 0 THEN SIGN = "S" DEGREE = ABS(DEGREE) DEGREEEE = INT(DEGREE) REST = FRAC(DEGREE) MINUTES = INT(REST * 60+.5) DG = PADZERO(CSTR(DEGREEEE)) MG = PADZERO(CSTR(MINUTES)) DMSLAT = DG + " " + SIGN + " " + MG END FUNCTION FUNCTION FRAC (VA) FRAC = VA - FIX(VA) END FUNCTION FUNCTION PADZERO (XY) XY = RIGHT(XY, 2) IF CINT(XY) < 10 THEN XY = "0" + RIGHT(XY, 1) PADZERO = XY END FUNCTION FUNCTION FNZ(XY) REM ** LUNAR FUNCTION ** FNZ=SIN(XY * PI / 180) END FUNCTION FUNCTION FNL(XY) REM ** LUNAR FUNCTION M=3600 ** FNL=SGN(XY) * ((ABS(XY) / 3600) / 360 - INT((ABS(XY) / 3600) / 360)) * 360 END FUNCTION FUNCTION FNP(XY) FNP=XY - (INT(XY / PI / 2) * PI * 2) END FUNCTION FUNCTION FNU(XY) FNU=XY - (INT(XY / 360) * 360) END FUNCTION FUNCTION ACS(XY) ACS=ATN(SQR(1 - XY * XY) / XY) END FUNCTION FUNCTION ASN(XY) ASN=ATN(XY / SQR(1 - XY * XY)) END FUNCTION FUNCTION RAD(XY) RAD = XY * PI / 180 END FUNCTION FUNCTION DEGR(XY) DEGR=XY*180/PI END FUNCTION SUB ASSEMBLE(I) D1 = PL(I, JC + 1) D2 = PL(I, JC + 2) D3 = PL(I, JC + 3) JC = JC + 3 S = RAD(D1 + D2 * T + D3 * T * T) END SUB SUB REPO IF Y=0 THEN Y=TINY IF X=0 THEN X=TINY R=(X*X+Y*Y)^.5 A=ATN(Y/X) IF A<0 THEN A=A+PI IF Y<0 THEN A=A+PI END SUB