De gebruikte software

 

 

 

PROGRAMMA BERERA.BAS

              
        ' Programma: BERERA.BAS  (Calculate Rightassencion)
        ' Dit is de versie van VINDRA.BAS tbv publicatie op mijn site.
        ' Dit programma berekent de Rightassencion van een ster die precies
        ' in het zuiden staat. Dus hier een azimuth van 180 graden heeft.
        ' Benodigde gegevens zijn de datum en tijd in UTC waarop de ster 
        ' precies in het zuiden staat en de locatie van de waarnemer in
        ' Noorberbreedte en Oosterlengte

       
        ' berekenmethode:
        ' bereken eerst de mst (mean siderial time)
        ' Reken de longitude van de waarnemer om in decimale graden
        ' tel die bij de mean siderial time op. (mst is in graden)
        ' verander de nieuwe mst in decimale uren door hem door 15 te delen.
        ' deze tijd is de RA  = RightAssencion
        ' Deze tijd nog even omrekenen in een nette uur:min:sec notatie
        ' en klaar
        ' W. Apon 6-8-2008

        ' Oftewel: als ik van mijn bron precies bepaal wanneer hij hier
        ' in het zuiden staat, kan ik de Right Asencion berekenen!
       
        ' Dit programma is geschreven in Quick Basic van Microsoft en  
        ' draait in een Microsoft DOS omgeving.
        ' ter controle:  dit programma geeft als output:  17:56:37.6
 

        DEFDBL A-Z

        CLS
      
        ' De input gegevens
        '===================================================

        ' Tijds gegevens:
        '================
         year = 2008
         month = 8
         day = 5
         hour = 20 ' UUR in UTC
         minute = 30
         second = 0

         'De locatie van de waarnemer
         '===========================
         ' Eerst Oosterlengte
         lon$ = "6graden 54minuten 27.67seconden"    ' precies deze notatie aanhouden

         ' Dan Noorderbreedte
         lat$ = "53graden 16minuten 49.32seconden"    ' precies deze notatie aanhouden


        ' EINDE van in te voeren gegevens
        '================================
        '
        ' Start van het hoofdprogramma
        '==============================
        '
        pi = 3.14159265#

        GOSUB berekenmeansiderialtime
 
        CALL gradenminsecnaargraden(lon$, graadjes)
        
        mst = mst + graadjes

        uur = mst / 15

        CALL uurnaaruurminsec(uur, tijdstring$)
       
        PRINT "Rightassencion : "; tijdstring$


        END

        ' Einde van het hoofdprogramma
        '==============================
        
        ' Hieronder volgen de subroutines
        '=================================


berekenmeansiderialtime:
        '===================================================
        ' bereken  LOCAL MEAN SIDERIAL TIME    in graden!!!!
        ' MST = functie van (UT)

         IF month = 1 OR month = 2 THEN
           year = year - 1
           month = month + 12
         END IF

         a = INT(year / 100)
         b = 2 - a + INT(a / 4)
         c = INT(365.25 * year)
         d = INT(30.6001 * (month + 1))

         'day since j2000.0
         jd = b + c + d - 730550.5 + day + (hour + minute / 60! + second / 3600) / 24!

         ' julian centuries since J2000.0
         jt = jd / 36525!

         'mean siderial time
         mst = 280.46061837# + 360.98564736629# * jd
         mst = mst + .000387933# * jt * jt - jt * jt * jt / 38710000 + lon

         ' zorg er nu voor dat deze hoek tussen 0 en 360 graden komt
         IF mst > 0! THEN
           DO
             mst = mst - 360!
           LOOP WHILE mst > 360!
         ELSE
           DO
             mst = mst + 360!
           LOOP WHILE mst < 0
         END IF

        RETURN

        SUB gradenminsecnaargraden (a$, graden)
        '=======================================
        'Deze routine rekent graden, minuten seconden notatie om naar
        ' decimale graden
        'Als het hele aantal graden < 0 is dan trekt hij de min en sec
        ' ervan af...


        ipos1 = INSTR(a$, "graden")
        graden = VAL(MID$(a$, 1, ipos1 - 1))

        ipos2 = INSTR(a$, "min")
        min = VAL(MID$(a$, ipos2 - 2, 2))
      

        ipos3 = INSTR(a$, "sec")
       
       
        sec$ = MID$(a$, ipos2 + 3, ipos3 - (ipos2 + 3))
        sec = VAL(sec$)
               
        IF graden < 0 THEN
          graden = graden - min / 60 - sec / 3600
        ELSE
          graden = graden + min / 60 + sec / 3600
        END IF
      
        END SUB

        SUB uurnaaruurminsec (uur, tijdstring$)
        '============================================
        ' deze routine maakt van een decimaal uur een stringnotatie als
        ' 15:10:50.2   uur:min:sec
        ' bedoeld  om mooi te printen

        uur2 = INT(uur)
        uur$ = LTRIM$(RTRIM$(STR$(uur2)))
        IF LEN(uur$) = 1 THEN
          uur$ = "0" + uur$
        END IF

        min = (uur - uur2) * 60
        min2 = INT(min)
        min$ = LTRIM$(RTRIM$(STR$(min2)))
        IF LEN(min$) = 1 THEN
          min$ = "0" + min$
        END IF


        sec = (min - min2) * 60
        sec$ = LTRIM$(RTRIM$(STR$(sec)))



        '  er zijn een aantal vormen waarin sec kan voorkomen.
        '  sec$ = "0"
        '  sec$ = "2"
        '  sec$ = "34"
        '  sec$ = ".123456767"
        '  sec$ = "5.1232345456"
        '  sec$ = "34.98647464"
       
        ' Nu al deze mogelijkheden apart behandelen
        '============================================
        'PRINT
        'PRINT "sec$ in subroutine : "; sec$




        ' ga eerst kijken het 0 is
        IF sec$ = "0" THEN
          sec$ = "00.0"
        END IF
      
        ' als sec uit 1 cijfer bestaat
        IF LEN(sec$) = 1 THEN
          sec$ = "0" + sec$ + ".0"
        END IF


        ' als sec uit 2 cijfers bestaan, zonder iets achter de komma
        IF INSTR(sec$, ".") = 0 THEN
          IF LEN(sec$) = 2 THEN
            sec$ = sec$ + "0"
          END IF
        END IF


        ' als sec .12345 is
        IF INSTR(sec$, ".") = 1 THEN
          sec$ = "00" + sec$
          sec$ = LEFT$(sec$, 4)
        END IF



        ' als sec 2.12345678 is
        IF INSTR(sec$, ".") = 2 THEN
          sec$ = "0" + sec$
          sec$ = LEFT$(sec$, 4)

        END IF



        ' als sec 12.45667789 is
        IF INSTR(sec$, ".") = 3 THEN
          sec$ = LEFT$(sec$, 4)
        END IF



        tijdstring$ = uur$ + ":" + LTRIM$(RTRIM$(min$)) + ":" + LTRIM$(RTRIM$(sec$))


        END SUB
EINDE VAN HET PROGRAMMA BERERA.BAS

 

 

HET PROGRAMMA VINDSTER.BAS

       

        ' Dit programma rekent Right ascension en declinatie van een ster
        ' om in azimuth en elevatie op een locatie en een zeker tijdstip
        ' Dit programma is geschreven in Quick Basic van Microsoft en draait
        ' in een Microsoft Dos omgeving.
        ' W. Apon 3-8-2008
       
        ' Ter controle: dit programma geeft als output een azimuth en elevatie van:
        '               azimuth = 255.24714476304480  graden
        '               elevatie=  60.90371409921462  graden
        DEFDBL A-Z

       
        ' De input gegevens
        '===================================================

         ' de locatie van de Ster  (Vega in Sterrenbeeld Lier)
         '=======================
         RA$ = "18uur 36minutgen 56.3seconden"               ' since Epoch J2000
         Dec$ = "38graden 47minuten 1.00seconden"



        ' Tijds gegevens:
        '================
         year = 2008
         month = 9
         day = 14
         hour = 21 ' UUR in UTC
         minute = 0
         second = 0

         'De locatie van de waarnemer
         '===========================
         ' Eerst Oosterlengte
         lon$ = "6graden 54minuten 27.67seconden"    ' precies deze notatie aanhouden

         ' Dan Noorderbreedte
         lat$ = "53graden 16min 49.32sec"    ' precies deze notatie aanhouden




        ' EINDE van in te voeren gegevens
        '=================================================================
   
   
        pi = 3.14159265#

      
        'Hier start het hoofdprogramma
        '===============================

        GOSUB berekenazimuthenelevatie
       
        ' Nu de in en output mooi op het scherm zetten
        CLS
        PRINT
        PRINT "Geef azimuth en elevatie van een ster programma "
        PRINT "================================================"
        PRINT
        PRINT


        PRINT "Right ascension van ster   : "; RA$
        PRINT "Declinatie van de ster     : "; Dec$


        PRINT
        PRINT
        PRINT "Op datum   dd-mm-year      : "; day; "-"; month; "-"; year

        PRINT "Tijdstip (UTC) (hh:mm:sec): "; hour; ":"; minute; ":"; second




        PRINT
        PRINT
        PRINT "Op locatie : "
        PRINT "Longitude (Oosterlengte)   : "; lon$
        PRINT "Latitude  (Noorderbreedte) : "; lat$



        PRINT
        PRINT
        PRINT "Azimuth                    : ";
        PRINT USING "###.##############"; azimuth
        PRINT "elevatie                   : ";
        PRINT USING "###.##############"; elevatie

        END



berekenazimuthenelevatie:

         ' even de RA omrekenen naar decimale uren
         CALL uurminsecnaaruur(RA$, RA)

         RA = 15 * RA   ' de ra is nu in graden omgerekend
                        ' 1 uur is precies 15 graden


          ' even de DEC omrekenen naar decimale graden
          CALL gradenminsecnaargraden(Dec$, Dec)

         ' nu lat en lon van de waarnemer precies uitrekenen
        
         ' even lon omrekenen naar decimale graden
         CALL gradenminsecnaargraden(lon$, lon)
        
         ' even lat omrekenen naar decimale graden
         CALL gradenminsecnaargraden(lat$, lat)

GOSUB berekenmeansiderialtime   ' ----> mst  in graden

         ha = mst - RA

         IF ha < 0 THEN
           ha = ha + 360
         END IF

        
         ' Zet nu graden om in radialen
         ha = ha * pi / 180
         Dec = Dec * pi / 180
         lat = lat * pi / 180


        ' bereken nu de elevatie in radialen en daarna in graden
        '========================================================
       
        sinALT = SIN(Dec) * SIN(lat) + COS(Dec) * COS(lat) * COS(ha)

         ' nu de arcsin van sinalt berekenen.
        x = sinALT
  
  
        alt = ATN(x / SQR(-x * x + 1))'  * 180 / pi
        alt2 = alt * 180 / pi

        elevatie = alt2





        ' Bereken nu azimuth in radialen en daarna in graden
        '====================================================
        cosaz = (SIN(Dec) - SIN(alt) * SIN(lat)) / (COS(alt) * COS(lat))

        'bereken de arccos van cosaz
        'output ===> A3

        x = cosaz

        A3 = (ATN(-x / SQR(-x * x + 1)) + 2 * ATN(1)) * 180 / pi

        azimuth = A3

        IF SIN(ha) > 0 THEN
         azimuth = 360 - azimuth
        END IF
   
        RETURN



berekenmeansiderialtime:
        '===================================================
        ' bereken  LOCAL MEAN SIDERIAL TIME    in graden!!!!
        ' MST = functie van (UT)

         IF month = 1 OR month = 2 THEN
           year = year - 1
           month = month + 12
         END IF

         a = INT(year / 100)
         b = 2 - a + INT(a / 4)
         c = INT(365.25 * year)
         d = INT(30.6001 * (month + 1))

         'day since j2000.0
         jd = b + c + d - 730550.5 + day + (hour + minute / 60! + second / 3600) / 24!

         ' julian centuries since J2000.0
         jt = jd / 36525!

         'mean siderial time
         mst = 280.46061837# + 360.98564736629# * jd
         mst = mst + .000387933# * jt * jt - jt * jt * jt / 38710000 + lon
         'PRINT "mst : "; mst; " in graden"

         ' zorg er nu voor dat deze hoek tussen 0 en 360 komt te liggen
         IF mst > 0! THEN
           DO
             mst = mst - 360!
           LOOP WHILE mst > 360!
         ELSE
           DO
             mst = mst + 360!
           LOOP WHILE mst < 0
         END IF

        RETURN

        SUB gradenminsecnaargraden (a$, graden)
        '=======================================
        'Deze routine rekent graden, minuten seconden notatie om naar
        ' decimale graden
        'Als het hele aantal graden < 0 is dan trekt hij de min en sec
        ' ervan af...



        ipos1 = INSTR(a$, "graden")
        graden = VAL(MID$(a$, 1, ipos1 - 1))

        ipos2 = INSTR(a$, "min")
        min = VAL(MID$(a$, ipos2 - 2, 2))
      

        ipos3 = INSTR(a$, "sec")
       
       
        sec$ = MID$(a$, ipos2 + 3, ipos3 - (ipos2 + 3))
        sec = VAL(sec$)
               
        IF graden < 0 THEN
          graden = graden - min / 60 - sec / 3600
        ELSE
          graden = graden + min / 60 + sec / 3600
        END IF
      
        END SUB

        SUB uurminsecnaaruur (a$, uur)
        '=============================


        ipos1 = INSTR(a$, "uur")
        uur = VAL(MID$(a$, 1, ipos1 - 1))


        ipos2 = INSTR(a$, "min")

        min = VAL(MID$(a$, ipos2 - 2, 2))


        ipos3 = INSTR(a$, "sec")

        sec$ = MID$(a$, ipos2 + 3, ipos3 - (ipos2 + 3))
        sec = VAL(sec$)

        uur = uur + min / 60 + sec / 3600

        END SUB


EINDE VAN HET PROGRAMMA VINDSTER.BAS