10 REM this program is to track the sun from 10 minutes 20 REM to 10 minutes starting at a given time/date 30 REM constants pi = 3.14159265359# unitastro = 1.496E+08 35 REM latitude and longitude of my home latitude = 44.83 latitude = latitude* pi / 180 longitude = -0.56 50 REM input page CLS PRINT "***************************************************" PRINT "* *" PRINT "* PROGRAMM *" PRINT "* TRACK THE SUN *" PRINT "* *" PRINT "* from 10 MIN to 10 MIN *" PRINT "***************************************************" PRINT " " 60 REM input date INPUT " DATE of Beginning (JJ MM AAAA) :"; jour, mois, annee INPUT "TIME UTC (HH MM) :"; heure, minutes 70 REM calculation of the number of days since 1/1/1900 150 h8 = (heure + minutes / 60) / 24 j = jour + h8 n = annee * 365 + 31 * (mois - 1) + j IF mois > 2 GOTO 160 annee = annee - 1 160 n = n + INT(annee / 4) - INT(annee / 100) + INT(annee / 400) IF mois < 2 GOTO 190 n = n - INT((mois - 1) * .4 + 2.7) 190 REM nj=number of days since 1/1/1901 nj = n - 694325 PRINT "number of daysa since 1/1/1901 :", nj 210 REM position of sun l0 = 4.8689 l1 = .0172027914# p0 = 4.9085 p1 = 8.1856E-07 e = .01675104# k = 7 a = 1.00000023# p = p0 + p1 * nj l2 = l0 + l1 * nj m = l2 - p m2 = m 220 REM equation of kepler u = m FOR kk = 0 TO k u = m + e * SIN(u) NEXT kk v = 2 * ATN(TAN(u / 2) * SQR((1 + e) / (1 - e))) REM r=radius vector of sun r = a * (1 - e * COS(u)) PRINT "raduis vector of sun :", r PRINT "that is ", r * unitastro, "; km'" l = v + p xs = r * COS(l) ys = r * SIN(l) ld = l * 180 / pi ld = (ld / 360 - INT(ld / 360)) * 360 IF ld < 0 THEN ld = ld + 360 REM ld=longitude of sun ld = INT(ld * 10 + .5) / 10 PRINT "longitude du soleil :", ld REM sideral time rd = 1.7273 + .0172027914# * nj + h8 * 2 * pi - longitude * pi / 180 rd = (rd / 2 / pi - INT(rd / 2 / pi)) * 2 * pi IF rd < 0 THEN rd = rd + 2 * pi ts = rd REM right ascention and declinaison b = 0 ep = .40927971# sd = COS(ep) * SIN(b) + SIN(ep) * COS(b) * SIN(l) REM de=declinaison de = ATN(sd / SQR(1 - sd * sd)) sr = -SIN(ep) * SIN(b) + COS(ep) * COS(b) * SIN(l) rd = ATN(sr / COS(b) / COS(l)) IF COS(b) * COS(l) < 0 THEN rd = rd + pi IF rd < 0 THEN rd = rd + (2 * pi) REM ar=right asc ar = rd h = INT(rd / pi * 12) mm = INT((rd - h * pi / 12) * 720 / pi) s = INT((rd - h * pi / 12 - m * pi / 720) * 43200 / pi) PRINT "right asc :", h, mm, s PRINT "declinaison :", INT(de * 18000 / pi + .5) / 100 REM azimut elevation anghor = ts - ar cosdiszen = SIN(latitude) * SIN(de) + COS(latitude) * COS(de) * COS(anghor) elev = ATN(cosdiszen / SQR(-cosdiszen * cosdiszen + 1)) elev = elev * 180 / pi ass = COS(de) * SIN(anghor) ac = (-COS(latitude) * SIN(de) + SIN(latitude) * COS(de) * COS(anghor) / COS(elev)) azim = ATN(ass / ac) IF ac < 0 THEN azim = azim + pi azim = azim * 180 / pi azim = (azim / 360 - INT(azim / 360)) * 360 IF azim < 0 THEN azim = azim + 360 PRINT "azimut :", azim PRINT "elevation :", elev REM loop minutes = minutes + 10 IF minutes > 60 THEN heure = heure + 1 IF minutes > 60 THEN minutes = minutes - 60 IF heure > 20 GOTO 300 PRINT "***********************************************************" PRINT " " GOTO 150 300 PRINT "end of day" 400 END